You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/state-a-components-memory.md
+23-23Lines changed: 23 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ Componentes comumente precisam mudar o que está na tela como resultado de uma i
19
19
20
20
## Quando uma variável comum não é o suficiente {/*when-a-regular-variable-isnt-enough*/}
21
21
22
-
Aqui está um componente que renderiza a imagem de uma escultura. Clicando no botão "Next" deveria mostrar a próxima escultura mudando o `index` para `1`, então `2`, e assim por diante. Entretanto, isso **não funcionará** (você pode tentar!):
22
+
Aqui está um componente que renderiza a imagem de uma escultura. Ao clicar no botão "Next" ele deveria mostrar a próxima escultura mudando o `index` para `1`, então `2`, e assim por diante. Entretanto, isso **não funcionará** (você pode tentar!):
23
23
24
24
<Sandpack>
25
25
@@ -153,13 +153,13 @@ button {
153
153
154
154
O manipulador de eventos `handleClick` está atualizando a variável local, `index`. Mas duas coisas previnem essa mudança de ser visível:
155
155
156
-
1.**Variáveis locais não persistem entre renderizações** Quando o React renderiza esse componente uma segunda vez, ele o renderiza do princípio--sem considerar quaisquer mudanças às variáveis locais.
156
+
1.**Variáveis locais não persistem entre renderizações.** Quando o React renderiza esse componente uma segunda vez, ele o faz do princípio--sem considerar quaisquer mudanças às variáveis locais.
157
157
2.**Mudanças às variáveis locais não acionam renderizações.** O React não percebe que precisa renderizar o componente novamente com os novos dados.
158
158
159
159
Para atualizar um componente com novos dados, duas coisas precisam acontecer:
160
160
161
161
1.**Reter** os dados entre renderizações.
162
-
2.**Acionar** o React para renderizar o componente com os novos dados (re-renderização)
162
+
2.**Acionar** o React para renderizar o componente com os novos dados (re-renderização).
163
163
164
164
O Hook [`useState`](/reference/react/useState) provê essas duas coisas:
`index` é uma variável de estado e `setIndex` é a função de definição.
190
190
191
-
> A sintaxe `[` e `]` aqui é chamada de [desestruturação de array](https://javascript.info/destructuring-assignment) e ela permite que você leia valores de um array. O array retornado pelo `useState` sempre tem exatamente dois itens.
191
+
> A sintaxe `[` e `]` aqui é chamada de [desestruturação de array](https://javascript.info/destructuring-assignment) e ela permite que você leia valores de um array. O array retornado pelo `useState` sempre possui exatamente dois itens.
192
192
193
-
Assim é como eles trabalham juntos em `handleClick`:
193
+
Essa é a maneira como eles trabalham juntos em `handleClick`:
194
194
195
195
```js
196
196
functionhandleClick() {
@@ -337,17 +337,17 @@ No React, `useState`, assim como qualquer outra função iniciada com "`use`",
337
337
338
338
*Hooks* são funções especiais que estão disponíveis somente enquanto o React está [renderizando](/learn/render-and-commit#step-1-trigger-a-render) (as quais nós entraremos em mais detalhes na próxima página). Eles permitem que você "se conecte" a diferentes recursos do React.
339
339
340
-
State é só um desses recursos, mas você irá conhecer os outros Hooks mais tarde.
340
+
State é só um destes recursos, mas você irá conhecer os outros Hooks mais tarde.
341
341
342
342
<Pitfall>
343
343
344
-
**Hooks--funções iniciadas com `use`-só podem ser chamadas no nível superior dos seus componentes ou em [seus próprios Hooks.](/learn/reusing-logic-with-custom-hooks)** Você não pode chamar Hooks dentro de condições, loops, ou outras funções aninhadas. Hooks são funções, mas é útil pensar neles como declarações incondicionais sobre as necessidades do seu componente. Você "usa" recursos do React no topo de seu componente similarmente a como você "importa" módulos no topo de seu arquivo.
344
+
**Hooks--funções iniciadas com `use`--só podem ser chamadas no nível superior dos seus componentes ou em [seus próprios Hooks.](/learn/reusing-logic-with-custom-hooks)** Você não pode chamar Hooks dentro de condições, loops, ou outras funções aninhadas. Hooks são funções, mas é útil pensar neles como declarações incondicionais sobre as necessidades do seu componente. Você "usa" recursos do React no topo de seu componente similarmente a como você "importa" módulos no topo de seu arquivo.
345
345
346
346
</Pitfall>
347
347
348
348
### Anatomia do `useState` {/*anatomy-of-usestate*/}
349
349
350
-
Quando você chama[`useState`](/reference/react/useState), você está dizendo ao React que você quer que esse componente lembre-se de algo:
350
+
Ao chamar[`useState`](/reference/react/useState), você está dizendo ao React que você quer que esse componente lembre-se de algo:
351
351
352
352
```js
353
353
const [index, setIndex] =useState(0);
@@ -357,11 +357,11 @@ Nesse caso, você quer que o React lembre-se de `index`.
357
357
358
358
<Note>
359
359
360
-
A convenção é nomear esse par como `const [algo, setAlgo]`. Você poderia nomeá-lo de qualquer coisa, mas convenções tornam as coisas mais fáceis de se entender entre projetos.
360
+
A convenção é nomear esse par como `const [algo, setAlgo]`. Você poderia nomeá-lo de qualquer outra coisa, mas convenções tornam as coisas mais fáceis de se entender entre projetos.
361
361
362
362
</Note>
363
363
364
-
O único argumento para o `useState` é o **valor inicial** da sua variável de state. Nesse exemplo, o valor inicial do`index` é definido como `0` com `useState(0)`.
364
+
O único argumento para o `useState` é o **valor inicial** da sua variável de state. Nesse exemplo, o valor inicial de`index` é definido como `0` com `useState(0)`.
365
365
366
366
Toda vez que seu componente é renderizado, `useState` lhe dá um array contendo dois valores:
1.**Seu componente renderiza pela primeira vez.** Porque você passou `0` ao `useState` como o valor inicial de `index`, ele retornará `[0, setIndex]`. O React lembra-se de que `0` é o valor de state mais recente.
378
-
2.**Você atualiza o state.** Quando um usuário clica no botão, ele chama `setIndex(index + 1)`. `index` é `0`, então é `setIndex(1)`. Isso diz ao React para se lembrar que `index` é `1` a partir de agora e aciona outra renderização.
378
+
2.**Você atualiza o state.** Quando um usuário clica no botão, ele chama `setIndex(index + 1)`. `index` é `0`, logo `setIndex(1)`. Isto diz ao React para se lembrar que `index` é `1` a partir de agora e aciona outra renderização.
379
379
3.**A segunda renderização do seu componente.** O React ainda vê `useState(0)`, mas porque ele *lembra* que você definiu `index` como `1`, retorna `[1, setIndex]` em vez disto.
380
380
4. E assim por diante!
381
381
@@ -520,15 +520,15 @@ button {
520
520
521
521
</Sandpack>
522
522
523
-
É uma boa ideia ter múltiplas variáveis de state se este não for relacionado, como `index` e `showMore` nesse exemplo. Mas se você perceber que frequentemente altera duas variáveis de estado juntas, pode ser mais fácil combiná-las em uma. Por exemplo, se você tem um formulário com vários campos, é mais conveniente ter uma única variável de state a qual armazena um objeto do que uma variável por campo. Leia [Escolhendo a Estrutura do State](/learn/choosing-the-state-structure) para mais dicas.
523
+
É uma boa ideia ter múltiplas variáveis de state se estas não for relacionadas, como `index` e `showMore` nesse exemplo. Mas se você perceber que frequentemente altera duas variáveis de estado juntas, pode ser mais fácil combiná-las em uma. Por exemplo, se você tem um formulário com vários campos, é mais conveniente ter uma única variável de state a qual armazena um objeto do que uma variável por campo. Leia [Escolhendo a Estrutura do State](/learn/choosing-the-state-structure) para mais dicas.
524
524
525
525
<DeepDive>
526
526
527
527
#### Como o React sabe qual state retornar? {/*how-does-react-know-which-state-to-return*/}
528
528
529
-
Você pode ter notado que a chamada ao `useState` não recebe nenhuma informação sobre *a qual* variável de state ela se refere. Não há um "identificador" que é passado ao `useState`, então como este sabe qual dessas variáveis de state retornar? Depende em alguma magia como analisar suas funções? A resposta é não.
529
+
Você pode ter notado que a chamada ao `useState` não recebe nenhuma informação sobre *a qual* variável de state ela se refere. Não há um "identificador" que é passado ao `useState`, então como este sabe qual dessas variáveis de state retornar? Depende de alguma magia como analisar suas funções? A resposta é não.
530
530
531
-
Em vez disso, para viabilizar sintaxe concisa, os Hooks **dependem em uma chamada estável em toda renderização do mesmo componente.** Isso funciona bem na prática porque se você seguir a regra acima ("só chamar Hooks no nível do topo"), os Hooks sempre serão chamados na mesma ordem. Adicionalmente, um [plugin de linter](https://www.npmjs.com/package/eslint-plugin-react-hooks) pega a maioria dos erros.
531
+
Em vez disso, para viabilizar sintaxe concisa, os Hooks **dependem em uma chamada estável feita em toda renderização do mesmo componente.** Isso funciona bem na prática porque se você seguir a regra acima ("só chamar Hooks no nível do topo"), os Hooks sempre serão chamados na mesma ordem. Adicionalmente, um [plugin de *linter*](https://www.npmjs.com/package/eslint-plugin-react-hooks) pega a maioria dos erros.
532
532
533
533
Internamente, o React armazena um array de pares de state para cada componente. Ele também mantêm o índice do par atual, o qual é definido como `0` antes da renderização. A cada vez que você chama `useState`, o React lhe dá o próximo par de state e incrementa o índice. Você pode ler mais sobre esse mecanismo em [React Hooks: Não é Mágica, Apenas Arrays.](https://medium.com/@ryardley/react-hooks-not-magic-just-arrays-cd4f1857236e)
534
534
@@ -893,18 +893,18 @@ button {
893
893
894
894
Isto é o que faz do state diferente de variáveis comuns que você pode declarar no topo de seu módulo. State não é atrelado a uma chamada de função em particular ou a um lugar no código, mas sim é "local" a um lugar específico na tela. Você renderizou dois componentes `<Gallery />`, então seus states são armazenados separadamente.
895
895
896
-
Perceba também como o componente `Page` não "sabe" nada sobre o state de `Gallery` ou se até ele tem algum. Diferentemente das props, **o state é completamente privado ao componente declarando-o.** O componente pai não pode alterá-lo. Isso permite que você adicione sate a qualquer componente ou remova-o sem impactar o restante dos componentes.
896
+
Perceba também como o componente `Page` não "sabe" nada sobre o state de `Gallery` ou se até ele tem algum. Diferentemente das props, **o state é completamente privado ao componente que o declara.** O componente pai não pode alterá-lo. Isso permite que você adicione state a qualquer componente ou remova-o sem impactar o restante dos componentes.
897
897
898
898
E se você quisesse que ambas as galerias mantivessem seus states sincronizados? A maneira correta de fazer isso em React se dá por meio da *remoção* do state dos componentes filhos e armazenando-o no componente pai comum mais próximo a eles. As próximas páginas focarão na organização do state de um único componente, mas nós iremos voltar a este assunto em [Compartilhando State Entre Componentes.](/learn/sharing-state-between-components)
899
899
900
900
<Recap>
901
901
902
902
* Use uma variável de state quando um componente precisa "lembrar" de alguma informação entre renderizações.
903
903
* Variáveis de state são declaradas chamando o Hook `useState`.
904
-
* Hooks são funções especiais que começas com `use`. Eles permitem que você "se conecte" a recursos do React como state.
904
+
* Hooks são funções especiais que começam com `use`. Eles permitem que você "se conecte" a recursos do React como o state.
905
905
* Hooks podem lembrá-lo de importações: eles precisam se chamados incondicionalmente. Chamar Hooks, incluindo `useState`, só é válido no nível do topo de um componente ou em outro Hook.
906
-
* O Hook `useState` retorna um par de valores: o state atual e a função para o atualizar.
907
-
* Você pode ter mais de uma variáveis de state. Internamente, o React as combina por sua ordem.
906
+
* O Hook `useState` retorna um par de valores: o state atual e a função para atualizá-lo.
907
+
* Você pode ter mais de uma variável de state. Internamente, o React as combina por sua ordem.
908
908
* State é privado ao componente. Se você o renderizar em dois lugares, cada cópia recebe seu próprio state.
909
909
910
910
</Recap>
@@ -1225,7 +1225,7 @@ Note como `hasPrev` e `hasNext` são usados para *ambos* a JSX retornada e dentr
1225
1225
1226
1226
#### Corrigir entradas de formulário travadas {/*fix-stuck-form-inputs*/}
1227
1227
1228
-
Quando você digita nos campos de entrada, nada aparece. É como se os valores de entrada estivessem "presos" com strings vazias. O `value` do primeiro `<input>` é definido para sempre corresponder à variável `lastName`. Isso está correto. Ambas as entradas possuem manipuladores de evento `onChange`, os quais tentam atualizar as variáveis baseados na entrada de usuário mais recente (`e.target.value`). Entretanto, as variáveis não parecem se "lembrar" de seus valores entre re-renderizações. Conserte isso usando variáveis de state como alternativa.
1228
+
Quando você digita nos campos de entrada, nada aparece. É como se os valores de entrada estivessem "presos" com strings vazias. O `value` do primeiro `<input>` é definido para sempre corresponder à variável `lastName`. Isso está correto. Ambas as entradas possuem manipuladores de evento `onChange`, os quais tentam atualizar as variáveis baseados na entrada mais recente do usuário (`e.target.value`). Entretanto, as variáveis não parecem se "lembrar" de seus valores entre re-renderizações. Conserte isso usando variáveis de state como alternativa.
1229
1229
1230
1230
<Sandpack>
1231
1231
@@ -1274,7 +1274,7 @@ h1 { margin-top: 10px; }
1274
1274
1275
1275
<Solution>
1276
1276
1277
-
Primeiramente, importe `useState` a partir do React. Então substitua `firstName` e `lastName` com variáveis de state declaradas chamando `useState`. Por fim, substitua todas as atribuições `firstName = ...` com `setFirstName(...)`, e faça o mesmo para `lastName`. Não se esqueça de atualizar `handleReset` também para que o botão de redefinição (Reset) funcione.
1277
+
Primeiramente, importe `useState` a partir do React. Então substitua `firstName` e `lastName` com variáveis de state declaradas chamando `useState`. Por fim, substitua todas as atribuições `firstName = ...` com `setFirstName(...)`, e faça o mesmo para `lastName`. Não se esqueça de também atualizar `handleReset` para que o botão de redefinição (Reset) funcione.
1278
1278
1279
1279
<Sandpack>
1280
1280
@@ -1331,7 +1331,7 @@ Aqui está um pequeno formulário o qual supostamente deve permitir que o usuár
1331
1331
1332
1332
<Hint>
1333
1333
1334
-
Existem quaisquer limitações sobre _onde_ Hooks podem ser chamados? Esse componente quebra alguma das regras? Cheque se existem quaisquer comentários desabilitando checagens do linter--é aqui que bugs geralmente se escondem!
1334
+
Existem quaisquer limitações sobre _onde_ Hooks podem ser chamados? Esse componente quebra alguma das regras? Cheque se existem quaisquer comentários desabilitando checagens do *linter*--é aqui que bugs geralmente se escondem!
1335
1335
1336
1336
</Hint>
1337
1337
@@ -1446,13 +1446,13 @@ export default function FeedbackForm() {
1446
1446
1447
1447
Tente mover a segunda chamada `useState` depois da condição `if` e note como isto quebra novamente.
1448
1448
1449
-
Se seu linter está [configurado para React](/learn/editor-setup#linting), você deve ver um erro de lint quando faz um erro como esse. Se você não vê um erro quando tenta código falho localmente, você precisa configurar linting para o seu projeto.
1449
+
Se seu *linter* está [configurado para React](/learn/editor-setup#linting), você deve ver um erro de *lint* quando faz um erro como esse. Se você não vê um erro quando tenta código falho localmente, você precisa configurar *linting* para o seu projeto.
1450
1450
1451
1451
</Solution>
1452
1452
1453
1453
#### Remova state desnecessário {/*remove-unnecessary-state*/}
1454
1454
1455
-
Quando o botão é clicado, esse exemplo deve perguntar pelo nome do usuário e então exibir um alerta cumprimentando-o. Você tentou usa state para manter o nome, mas por alguma razão ele sempre mostra "Hello, !".
1455
+
Quando o botão é clicado, esse exemplo deve perguntar pelo nome do usuário e então exibir um alerta cumprimentando-o. Você tentou usar state para manter o nome, mas por alguma razão ele sempre mostra "Hello, !".
1456
1456
1457
1457
Para consertar esse código, remova a variável de state desnecessária. (Nós discutiremos sobre [por que isso não funcionou](/learn/state-as-a-snapshot) mais tarde.)
0 commit comments