--- id: 5a24c314108439a4d4036176 title: Use State to Toggle an Element challengeType: 6 isRequired: false videoUrl: '' localeTitle: Use o estado para alternar um elemento --- ## Description
Você pode usar o state em aplicativos React de maneiras mais complexas do que o que você viu até agora. Um exemplo é monitorar o status de um valor e renderizar a UI condicionalmente com base nesse valor. Existem várias maneiras diferentes de fazer isso, e o editor de código mostra um método.
## Instructions
MyComponent tem uma propriedade de visibility que é inicializada como false . O método render retorna uma visualização se o valor da visibility for true e uma visualização diferente se for false. Atualmente, não há como atualizar a propriedade de visibility no state do componente. O valor deve alternar entre verdadeiro e falso. Há um manipulador de cliques no botão que aciona um método de classe chamado toggleVisibility() . Defina este método para que o state de visibility alternado para o valor oposto quando o método for chamado. Se a visibility for false , o método a define como true e vice-versa. Por fim, clique no botão para ver a renderização condicional do componente com base em seu state . Dica: não se esqueça de ligar a palavra-chave this ao método no construtor!
## Tests
```yml tests: - text: MyComponent deve retornar um elemento div que contém um 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: O estado de MyComponent deve ser inicializado com uma propriedade de visibility configurada como 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: Clicar no elemento de botão deve alternar a propriedade de visibility no estado entre true e 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 ```