Estoy jugando con React.js por primera vez y no puedo encontrar una manera de mostrar u ocultar algo en una página mediante un evento de clic. No estoy cargando ninguna otra biblioteca en la página, por lo que estoy buscando alguna forma nativa utilizando la biblioteca React. Esto es lo que tengo hasta ahora. Me gustaría mostrar los resultados div cuando se active el evento click.
var Search= React.createClass({
handleClick: function (event) {
console.log(this.prop);
},
render: function () {
return (
<div className="date-range">
<input type="submit" value="Search" onClick={this.handleClick} />
</div>
);
}
});
var Results = React.createClass({
render: function () {
return (
<div id="results" className="search-results">
Some Results
</div>
);
}
});
React.renderComponent(<Search /> , document.body);
javascript
reactjs
usuario1725382
fuente
fuente
Respuestas:
Reaccionar hacia 2020
En la
onClick
devolución de llamada, llame a la función de establecimiento del enlace de estado para actualizar el estado y volver a representar:JSFiddle
Reacciona alrededor de 2014
La clave es actualizar el estado del componente en el controlador de clics mediante
setState
. Cuando se aplican los cambios de estado,render
se llama nuevamente al método con el nuevo estado:JSFiddle
fuente
fuente
Aquí hay una sintaxis alternativa para el operador ternario:
es equivalente a:
Inclinarse por qué
También sintaxis alternativa con
display: 'none';
Sin embargo, si usa en exceso
display: 'none'
, esto conduce a la contaminación DOM y, en última instancia, ralentiza su aplicación.fuente
Aquí está mi enfoque.
En el código anterior, para lograr esto, estoy usando código como:
Eso rendirá
SomeElement
solo siopened
es cierto. Funciona debido a la forma en que JavaScript resuelve las condiciones lógicas:Razones para usar este enfoque en lugar de CSS 'display: none';
<TabView>
cambian los accesorios del elemento padre (p. ej. ), incluso si solo ve una pestaña, las 5 pestañas se volverán a representardisplay: invisible ? 'block' : 'none'
que podría romper el diseñosomeBoolean && <SomeNode />
es muy simple de entender y razonar, especialmente si su lógica relacionada con mostrar algo o no se vuelve complejafuente
this.setState({isOpened: !isOpened});
. No dependa del estado en sí mismo cuando modifique el estado. Aquí es un ejemplo bueno: reactjs.org/docs/... lo que debe ser:this.setState( s => ({isOpened: !s.isOpened}) )
. Tenga en cuenta la función de flecha dentro de setState.con la versión más reciente, react 0.11, también puede devolver nulo para que no se muestre contenido.
Renderizado a nulo
fuente
Creé un pequeño componente que maneja esto por usted: react-toggle-display
Establece el atributo de estilo
display: none !important
según los accesorioshide
oshow
.Ejemplo de uso:
fuente
Ya hay varias respuestas excelentes, pero no creo que se hayan explicado muy bien y varios de los métodos proporcionados contienen algunas trampas que podrían hacer tropezar a las personas. Así que voy a repasar las tres formas principales (más una opción fuera del tema) para hacer esto y explicar los pros y los contras. Principalmente escribo esto porque la opción 1 se recomendó mucho y hay muchos problemas potenciales con esa opción si no se usa correctamente.
Opción 1: Representación condicional en el padre.
No me gusta este método a menos que solo vayas a representar el componente una vez y lo dejes allí. El problema es que hará que reaccione para crear el componente desde cero cada vez que cambie la visibilidad. Aquí está el ejemplo. LogoutButton o LoginButton se representan condicionalmente en el LoginControl primario. Si ejecuta esto, notará que se llama al constructor con cada clic en el botón. https://codepen.io/Kelnor/pen/LzPdpN?editors=1111
Ahora React es bastante rápido para crear componentes desde cero. Sin embargo, todavía tiene que llamar a su código al crearlo. Entonces, si el código de su constructor, componentDidMount, render, etc. es costoso, entonces se ralentizará significativamente mostrando el componente. También significa que no puede usar esto con componentes con estado donde desea que se conserve el estado cuando está oculto (y restaurado cuando se muestra). La única ventaja es que el componente oculto no se crea hasta que se selecciona. Por lo tanto, los componentes ocultos no retrasarán la carga de la página inicial. También puede haber casos en los que DESEA un componente con estado para restablecer cuando se alterna. En cuyo caso esta es tu mejor opción.
Opción 2: Representación condicional en el niño
Esto crea ambos componentes una vez. Luego, cortocircuita el resto del código de renderizado si el componente está oculto. También puede cortocircuitar otra lógica en otros métodos usando el accesorio visible. Observe el archivo console.log en la página de codepen. https://codepen.io/Kelnor/pen/YrKaWZ?editors=0011
Ahora, si la lógica de inicialización es rápida y los hijos no tienen estado, entonces no verá una diferencia en el rendimiento o la funcionalidad. Sin embargo, ¿por qué hacer que React cree un componente nuevo cada vez que se alterna? Sin embargo, si la inicialización es costosa, la Opción 1 la ejecutará cada vez que active un componente que ralentizará la página al cambiar. La opción 2 ejecutará todos los inits del componente en la carga de la primera página. Retrasando esa primera carga. Debe tener en cuenta de nuevo. Si solo muestra el componente una vez en función de una condición y no lo alterna, o desea que se restablezca cuando se activa, entonces la Opción 1 está bien y probablemente sea la mejor opción.
Sin embargo, si la carga lenta de la página es un problema, significa que tiene un código costoso en un método de ciclo de vida y que generalmente no es una buena idea. Puede, y probablemente debería, resolver la carga lenta de la página moviendo el costoso código de los métodos del ciclo de vida. Muévalo a una función asíncrona iniciada por ComponentDidMount y haga que la devolución de llamada la ponga en una variable de estado con setState (). Si la variable de estado es nula y el componente es visible, haga que la función de representación devuelva un marcador de posición. De lo contrario, renderice los datos. De esa manera, la página se cargará rápidamente y llenará las pestañas a medida que se cargan. También puede mover la lógica al padre y enviar los resultados a los niños como accesorios. De esa manera, puede priorizar qué pestañas se cargan primero. O guarde en caché los resultados y solo ejecute la lógica la primera vez que se muestre un componente.
Opción 3: Ocultar clase
La ocultación de clases es probablemente la más fácil de implementar. Como se mencionó, simplemente crea una clase CSS con display: none y asigna la clase en función del accesorio. La desventaja es que se llama el código completo de cada componente oculto y todos los componentes ocultos están conectados al DOM. (La opción 1 no crea los componentes ocultos en absoluto. Y la opción 2 corta el código innecesario cuando el componente está oculto y elimina el componente del DOM por completo). Parece que esto es más rápido al alternar la visibilidad según algunas pruebas realizadas por los comentaristas en otras respuestas pero no puedo hablar de eso.
Opción 4: un componente pero cambiar los accesorios. O tal vez ningún componente en absoluto y caché HTML.
Esta no funcionará para todas las aplicaciones y está fuera de tema porque no se trata de ocultar componentes, pero podría ser una mejor solución para algunos casos de uso que la ocultación. Digamos que tienes pestañas. Es posible escribir un componente React y simplemente usar los accesorios para cambiar lo que se muestra en la pestaña. También puede guardar el JSX en variables de estado y usar un accesorio para decidir qué JSX devolver en la función de representación. Si se debe generar el JSX, hágalo y almacénelo en caché en el padre y envíe el correcto como accesorio. O genere en el niño y almacénelo en el estado del niño y use accesorios para seleccionar el activo.
fuente
Esta es una buena manera de hacer uso del DOM virtual :
Ejemplo aquí
Usando ganchos React:
Ejemplo aquí
fuente
this.setState()
.Establece un valor booleano en el estado (por ejemplo, 'mostrar)' y luego hace:
fuente
Las mejores prácticas están a continuación de acuerdo con la documentación:
Renderice el elemento solo cuando el estado sea válido.
fuente
fuente
fuente
Comienzo con esta declaración del equipo React:
Básicamente, debe mostrar el componente cuando se hace clic en el botón, puede hacerlo de dos maneras, usando React puro o usando CSS, usando la forma React pura, puede hacer algo como el siguiente código en su caso, por lo que en la primera ejecución, los resultados no se muestran como
hideResults
estrue
, pero al hacer clic en el botón, el estado cambiará yhideResults
esfalse
y el componente se renderizará nuevamente con las nuevas condiciones de valor, este es un uso muy común de cambiar la vista de componentes en React ...Si desea seguir estudiando en representación condicional en React, eche un vistazo aquí .
fuente
Ejemplo simple de ocultar / mostrar con React Hooks: (pregunta por no tocar el violín)
fuente
Si desea ver cómo alternar la visualización de un componente, compruebe este violín.
http://jsfiddle.net/mnoster/kb3gN/16387/
fuente
Un método simple para mostrar / ocultar elementos en React usando ganchos
Ahora, agreguemos algo de lógica a nuestro método de renderizado:
Y
Buen trabajo.
fuente
En algunos casos, el componente de orden superior puede ser útil:
Crear componente de orden superior:
Extienda su propio componente:
Entonces puedes usarlo así:
Esto reduce un poco las repeticiones y obliga a apegarse a las convenciones de nomenclatura, sin embargo, tenga en cuenta que MyComp aún se instanciará: la forma de omitir se mencionó anteriormente:
{ !hidden && <MyComp ... /> }
fuente
Utilice el módulo rc-if-else
fuente
Una forma podría ser usar React
ref
y manipular la clase CSS utilizando la API del navegador. Su beneficio es evitar volver a reproducir en React si el único propósito es ocultar / mostrar algún elemento DOM con solo hacer clic en un botón.PD Corrígeme si me equivoco. :)
fuente
Si usa bootstrap 4, puede ocultar el elemento de esa manera
fuente
Esto también se puede lograr de esta manera (de manera muy fácil)
fuente
Este ejemplo muestra cómo puede cambiar entre componentes mediante el uso de una palanca que cambia cada 1 segundo
fuente
Use esta sintaxis simple y corta:
fuente
Aquí viene la solución simple, efectiva y mejor con un componente de reacción sin clase para mostrar / ocultar los elementos. Uso de React-Hooks que está disponible en el último proyecto create-react-app que usa React 16
Happy Coding :)
fuente
fuente
Puedes usar el archivo css
y en el archivo css
fuente
fuente
fuente
fuente
const
lugar devar
cuando declara constantes.