freeCodeCamp/curriculum/challenges/portuguese/03-front-end-libraries/react/set-state-with-this.setstat...

5.4 KiB

id title challengeType isRequired videoUrl localeTitle
5a24c314108439a4d4036173 Set State with this.setState 6 false Definir estado com this.setState

Description

Os desafios anteriores cobriram o state componente e como inicializar o estado no constructor . Há também uma maneira de alterar o state do componente. React fornece um método para atualizar o state componente chamado setState . Você chama o método setState dentro de sua classe de componentes da seguinte forma: this.setState() , passando um objeto com pares de valor-chave. As chaves são suas propriedades de estado e os valores são os dados de estado atualizados. Por exemplo, se estivéssemos armazenando um username no estado e queríamos atualizá-lo, ficaria assim:
this.setState ({
nome de usuário: 'Lewis'
});
React espera que você nunca modifique o state diretamente, em vez disso, sempre use this.setState() quando ocorrerem mudanças de estado. Além disso, você deve observar que o React pode agrupar várias atualizações de estado para melhorar o desempenho. O que isto significa é que as atualizações de estado através do método setState podem ser assíncronas. Há uma sintaxe alternativa para o método setState , que fornece uma maneira de contornar esse problema. Isso raramente é necessário, mas é bom manter isso em mente! Por favor, consulte a documentação do React para mais detalhes.

Instructions

Existe um elemento de button no editor de código que possui um manipulador onClick() . Esse manipulador é acionado quando o button recebe um evento de clique no navegador e executa o método handleClick definido no MyComponent . No método handleClick , atualize o state do componente usando this.setState() . Defina a propriedade name no state para igualar a string React Rocks! . Clique no botão e veja a atualização do estado renderizado. Não se preocupe se você não entender completamente como o código do manipulador de cliques funciona neste momento. Está coberto nos próximos desafios.

Tests

tests:
  - text: 'O estado de <code>MyComponent</code> deve ser inicializado com o par de valores de chave <code>{ name: Initial State }</code> .'
    testString: 'assert(Enzyme.mount(React.createElement(MyComponent)).state("name") === "Initial State", "The state of <code>MyComponent</code> should initialize with the key value pair <code>{ name: Initial State }</code>.");'
  - text: <code>MyComponent</code> deve renderizar um cabeçalho <code>h1</code> .
    testString: 'assert(Enzyme.mount(React.createElement(MyComponent)).find("h1").length === 1, "<code>MyComponent</code> should render an <code>h1</code> header.");'
  - text: O cabeçalho <code>h1</code> renderizado deve conter texto renderizado a partir do estado do componente.
    testString: 'async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(MyComponent)); const first = () => { mockedComponent.setState({ name: "TestName" }); return waitForIt(() => mockedComponent.html()); }; const firstValue = await first(); assert(/<h1>TestName<\/h1>/.test(firstValue), "The rendered <code>h1</code> header should contain text rendered from the component&apos;s state."); };'
  - text: Chamar o método <code>handleClick</code> no <code>MyComponent</code> deve definir a propriedade name no estado para igualar <code>React Rocks!</code> .
    testString: 'async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(MyComponent)); const first = () => { mockedComponent.setState({ name: "Before" }); return waitForIt(() => mockedComponent.state("name")); }; const second = () => { mockedComponent.instance().handleClick(); return waitForIt(() => mockedComponent.state("name")); }; const firstValue = await first(); const secondValue = await second(); assert(firstValue === "Before" && secondValue === "React Rocks!", "Calling the <code>handleClick</code> method on <code>MyComponent</code> should set the name property in state to equal <code>React Rocks!</code>."); };'

Challenge Seed

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      name: 'Initial State'
    };
    this.handleClick = this.handleClick.bind(this);
  }
  handleClick() {
    // change code below this line

    // change code above this line
  }
  render() {
    return (
      <div>
        <button onClick={this.handleClick}>Click Me</button>
        <h1>{this.state.name}</h1>
      </div>
    );
  }
};

After Test

console.info('after the test');

Solution

// solution required