--- id: 5a24c314108439a4d4036176 title: Use State to Toggle an Element challengeType: 6 isRequired: false videoUrl: '' localeTitle: Usar estado para alternar un elemento --- ## Description
Puede usar el state en las aplicaciones React de formas más complejas que las que ha visto hasta ahora. Un ejemplo es monitorear el estado de un valor, luego renderizar la IU condicionalmente en base a este valor. Hay varias maneras diferentes de lograr esto, y el editor de código muestra un método.
## Instructions
MyComponent tiene una propiedad de visibility que se inicializa en false . El método de renderización devuelve una vista si el valor de visibility es verdadero y una vista diferente si es falsa. Actualmente, no hay forma de actualizar la propiedad de visibility en el state del componente. El valor debe alternar entre verdadero y falso. Hay un controlador de clic en el botón que activa un método de clase llamado toggleVisibility() . Defina este método para que el state de visibility cambie al valor opuesto cuando se llama al método. Si la visibility es false , el método lo establece en true y viceversa. Finalmente, haga clic en el botón para ver la representación condicional del componente en función de su state . Sugerencia: ¡No olvide enlazar this palabra clave con el método en el constructor!
## Tests
```yml tests: - text: MyComponent debería devolver un elemento div que contenga un button . testString: 'assert.strictEqual(Enzyme.mount(React.createElement(MyComponent)).find("div").find("button").length, 1, "MyComponent should return a div element which contains a button.");' - text: El estado de MyComponent debe inicializarse con una propiedad de visibility establecida en false . testString: 'assert.strictEqual(Enzyme.mount(React.createElement(MyComponent)).state("visibility"), false, "The state of MyComponent should initialize with a visibility property set to false.");' - text: Al hacer clic en el elemento del botón se debe cambiar la propiedad de visibility en estado entre true y false . testString: 'async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(MyComponent)); const first = () => { mockedComponent.setState({ visibility: false }); return waitForIt(() => mockedComponent.state("visibility")); }; const second = () => { mockedComponent.find("button").simulate("click"); return waitForIt(() => mockedComponent.state("visibility")); }; const third = () => { mockedComponent.find("button").simulate("click"); return waitForIt(() => mockedComponent.state("visibility")); }; const firstValue = await first(); const secondValue = await second(); const thirdValue = await third(); assert(!firstValue && secondValue && !thirdValue, "Clicking the button element should toggle the visibility property in state between true and false."); }; ' ```
## Challenge Seed
```jsx class MyComponent extends React.Component { constructor(props) { super(props); this.state = { visibility: false }; // change code below this line // change code above this line } // change code below this line // change code above this line render() { if (this.state.visibility) { return (

Now you see me!

); } else { return (
); } } }; ```
### After Test
```js console.info('after the test'); ```
## Solution
```js // solution required ```