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. 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! 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
."); }; '
```