2021-02-06 04:42:36 +00:00
---
id: 5a24c314108439a4d4036184
2021-09-18 11:22:53 -07:00
title: Renderiza con una condición If-Else
2021-02-06 04:42:36 +00:00
challengeType: 6
forumTopicId: 301410
dashedName: render-with-an-if-else-condition
---
# --description--
2021-09-18 11:22:53 -07:00
Otra aplicación del uso de JavaScript para controlar la vista renderizada es vincular los elementos que se renderizan a una condición. Cuando la condición es verdadera (true), se renderiza una vista. Cuando es falso (false), es una vista diferente. Puedes hacer esto con una sentencia estándar `if/else` en el método `render()` de un componente React.
2021-02-06 04:42:36 +00:00
# --instructions--
2021-09-18 11:22:53 -07:00
MyComponent contiene un `boolean` en su estado que rastrea si deseas mostrar algún elemento en la interfaz de usuario o no. El `button` alterna el estado de este valor. Actualmente, renderiza la misma interfaz de usuario cada vez. Reescribir el método `render()` con una sentencia `if/else` de modo que si `display` es `true` , devuelvas el marcado actual. De lo contrario, devuelve el marcado sin el elemento `h1` .
2021-02-06 04:42:36 +00:00
2021-07-09 21:23:54 -07:00
**Note:** Debes escribir un `if/else` para pasar las pruebas. El uso del operador ternario no pasará aquí.
2021-02-06 04:42:36 +00:00
# --hints--
2021-07-09 21:23:54 -07:00
`MyComponent` debe existir y renderizar.
2021-02-06 04:42:36 +00:00
```js
assert(
(function () {
const mockedComponent = Enzyme.mount(React.createElement(MyComponent));
return mockedComponent.find('MyComponent').length === 1;
})()
);
```
2021-09-18 11:22:53 -07:00
Cuando `display` se establece en `true` , un `div` , `button` , y `h1` debe renderizarse.
2021-02-06 04:42:36 +00:00
```js
async () => {
const waitForIt = (fn) =>
new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250));
const mockedComponent = Enzyme.mount(React.createElement(MyComponent));
const state_1 = () => {
mockedComponent.setState({ display: true });
return waitForIt(() => mockedComponent);
};
const updated = await state_1();
assert(
mockedComponent.find('div').length === 1 & &
mockedComponent.find('div').children().length === 2 & &
mockedComponent.find('button').length === 1 & &
mockedComponent.find('h1').length === 1
);
};
```
2021-09-18 11:22:53 -07:00
Cuando `display` se establece en `false` , solo un `div` y un `button` debe renderizarse.
2021-02-06 04:42:36 +00:00
```js
async () => {
const waitForIt = (fn) =>
new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250));
const mockedComponent = Enzyme.mount(React.createElement(MyComponent));
const state_1 = () => {
mockedComponent.setState({ display: false });
return waitForIt(() => mockedComponent);
};
const updated = await state_1();
assert(
mockedComponent.find('div').length === 1 & &
mockedComponent.find('div').children().length === 1 & &
mockedComponent.find('button').length === 1 & &
mockedComponent.find('h1').length === 0
);
};
```
2021-07-09 21:23:54 -07:00
El método renderizado debe usar una sentencia `if/else` para comprobar la condición de `this.state.display` .
2021-02-06 04:42:36 +00:00
```js
(getUserInput) =>
assert(
getUserInput('index').includes('if') & &
getUserInput('index').includes('else')
);
```
# --seed--
## --after-user-code--
```jsx
ReactDOM.render(< MyComponent / > , document.getElementById('root'))
```
## --seed-contents--
```jsx
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
display: true
}
this.toggleDisplay = this.toggleDisplay.bind(this);
}
toggleDisplay() {
this.setState((state) => ({
display: !state.display
}));
}
render() {
// Change code below this line
return (
< div >
< button onClick = {this.toggleDisplay} > Toggle Display< / button >
< h1 > Displayed!< / h1 >
< / div >
);
}
};
```
# --solutions--
```jsx
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
display: true
}
this.toggleDisplay = this.toggleDisplay.bind(this);
}
toggleDisplay() {
this.setState((state) => ({
display: !state.display
}));
}
render() {
// Change code below this line
if (this.state.display) {
return (
< div >
< button onClick = {this.toggleDisplay} > Toggle Display< / button >
< h1 > Displayed!< / h1 >
< / div >
);
} else {
return (
< div >
< button onClick = {this.toggleDisplay} > Toggle Display< / button >
< / div >
);
}
}
};
```