Renderizado condicional de React
En React, puedes crear diferentes componentes para encapsular los diversos comportamientos que necesites. Luego, también puedes renderizar solo una parte de ellos según los cambios de estado de la aplicación.
El renderizado condicional en React es igual que en JavaScript. Usa operadores de JavaScript como `if` o el operador condicional para crear elementos que representen el estado actual, y luego deja que React actualice la interfaz de usuario según ellos.
Veamos primero dos componentes:
function UserGreeting(props) {
return <h1>欢迎回来!</h1>;
}
function GuestGreeting(props) {
return <h1>请先注册。</h1>;
}
Crearemos un componente `Greeting` que mostrará uno de ellos según si el usuario ha iniciado sesión o no:
Ejemplo de React
Pruébalo »
Variables de elemento
Puedes usar variables para almacenar elementos. Esto te ayuda a renderizar condicionalmente una parte del componente, mientras que el resto de la salida no cambia.
En el siguiente ejemplo, vamos a crear un componente con estado llamado `LoginControl`.
Renderizará según el estado actual<LoginButton />o<LogoutButton />, y también renderizará los del ejemplo anterior.<Greeting />。
Ejemplo de React
Pruébalo »
Operador Y &&
Puedes incrustar cualquier expresión en JSX envolviéndola con llaves, incluido el operador lógico Y (&&) de JavaScript, que permite renderizar condicionalmente un elemento de manera conveniente.
Ejemplo de React
Pruébalo »
En JavaScript,true && expressionsiempre devuelveexpression, mientras quefalse && expression siempre devuelvefalse。
Por lo tanto, si la condición estrue,&&el elemento de la derecha se renderizará, y si esfalse, React lo ignorará y lo omitirá.
Operador ternario
Otra forma de renderizado condicional es usar el operador condicional de JavaScript:
condition ? true : false.
En el siguiente ejemplo, lo usamos para renderizar condicionalmente un pequeño fragmento de texto.
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
The user is <b>{isLoggedIn ? 'currently' : 'not'}</b> logged in.
</div>
);
}
También se puede usar en expresiones más grandes, aunque no es muy intuitivo:
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
{isLoggedIn ? (
<LogoutButton onClick={this.handleLogoutClick} />
) : (
<LoginButton onClick={this.handleLoginClick} />
)}
</div>
);
}
Evitar que el componente se renderice
En raras ocasiones, es posible que desees ocultar un componente incluso si fue renderizado por otro componente. Para lograrlo, haz que el método `render` devuelva `null` en lugar de su resultado de renderizado.
En el siguiente ejemplo,<WarningBanner />se renderiza condicionalmente según el valor de la propiedad `warn`. Si el valor de `warn` es `false`, el componente no se renderizará:
Ejemplo de React
Pruébalo »
Que el método `render` de un componente devuelva `null` no afecta las devoluciones de llamada de los métodos del ciclo de vida del componente. Por ejemplo, `componentWillUpdate` y `componentDidUpdate` aún se pueden invocar.
Otras extensiones