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
Se um novo state for calculado usando o estado anterior, você pode passar uma função para `setSate`. A função receberá o valor anterior e retornará um valor atualizado. Aqui está um exemplo de um componente de contador que usa as duas formas de usar o `setState`:
50
+
Se um novo estado for calculado usando o estado anterior, você pode passar uma função para `setSate`. A função receberá o valor anterior e retornará um valor atualizado. Aqui está um exemplo de um componente de contador que usa as duas formas de usar o `setState`:
51
51
52
52
```js
53
53
functionCounter({initialCount}) {
@@ -68,19 +68,19 @@ Os botões "+" and "-" usam a forma funcional, porque o valor atualizado é base
68
68
69
69
> Note
70
70
>
71
-
> Ao contrário do método `setState` encontrado em componentes de classe, `useState` não combina automaticamente os objetos atualizados. Você pode replicar esse comportamento por combinar a função que atualiza o objeto e o `state` anterior usando a sintaxe `object spread`
71
+
> Ao contrário do método `setState` encontrado em componentes de classe, `useState` não combina automaticamente os objetos atualizados. Você pode replicar esse comportamento por combinar a função que atualiza o objeto e o estado anterior usando a sintaxe `object spread`
72
+
>
73
+
>
74
+
> ```js
75
+
>setState(prevState=> {
76
+
>// Object.assign também funcionaria
77
+
>return {...prevState, ...updatedValues};
78
+
> });
79
+
>```
80
+
> Outra opção é o `useReducer`, que é mais adequada para gerenciar objetos de estado que contêm vários sub-valores.
72
81
>
73
82
74
-
```js
75
-
setState(prevState=> {
76
-
// Object.assign também funcionaria
77
-
return {...prevState, ...updatedValues};
78
-
});
79
-
```
80
-
81
-
Outra opção é o `useReducer`, que é mais adequada para gerenciar objetos de estado que contêm vários sub-valores.
82
-
83
-
#### Inicialização Lenta {#lazy-initial-state}
83
+
#### Estado Inicial Preguiçoso {#lazy-initial-state}
84
84
85
85
O argumento `initialState` é o estado usado durante a primeira renderização. Nas próximas renderizações, ele é desconsiderado. Se o estado inicial é o resultado desse demorado processamento, você pode fornecer uma função, no qual será executada apenas na primeira renderização:
#### Pulando atualização de estado {#bailing-out-of-a-state-update}
94
+
#### Pulando Atualização de Estado {#bailing-out-of-a-state-update}
95
95
96
-
Se você atualizar o `state` do Hook com o mesmo valor do `state` atual, React irá pular a atualização sem renderizar os filhos ou disparar os efeitos. (React usa o [`Object.is` algorito de comparação](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#Description).)
96
+
Se você atualizar o estado do Hook com o mesmo valor do estado atual, React irá pular a atualização sem renderizar os filhos ou disparar os efeitos. (React usa o algoritimo de comparação [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#Description).)
97
97
98
98
### `useEffect` {#useeffect}
99
99
@@ -109,7 +109,7 @@ Em vez disso, use `useEffect`. A função passada para `useEffect` será executa
109
109
110
110
Por padrão, os efeitos são executados após cada renderização concluída, mas você pode optar por disparar [somente quando certos valores receberam atualização](#conditionally-firing-an-effect).
111
111
112
-
#### Limpando um efeito {#cleaning-up-an-effect}
112
+
#### Limpando um Efeito {#cleaning-up-an-effect}
113
113
114
114
Muitas vezes, os efeitos criam recursos que precisam ser limpos antes que o componente deixe a tela, como uma assinatura ou o ID de um temporizador. Para fazer isso, a função passada para `useEffect` pode retornar uma função de limpeza do efeito. Por exemplo, para criar uma assinatura:
115
115
@@ -126,15 +126,15 @@ useEffect(() => {
126
126
127
127
A função de limpeza é executada antes que o componente seja removido da UI para evitar vazamento de memória. Entretanto, se um componente renderiza várias vezes (como eles normalmente fazem), o ** efeito anterior é limpo antes de executar o próximo efeito**. No nosso exemplo, isto significa que uma nova assinatura é criada em cada atualização. Para evitar disparar um efeito em cada atualização, consulte a próxima seção.
128
128
129
-
#### Tempo dos efeitos {#timing-of-effects}
129
+
#### Tempo dos Efeitos {#timing-of-effects}
130
130
131
131
Ao contrário de `componentDidMount` e `componentDidUpdate`, a função passada para `useEffect` dispara **após** a renderização, durante o evento adiado. Isto torna o `useEffect` adequado para os muitos efeitos colaterais comuns, como a criação de assinaturas e manipuladores de eventos, porque a maioria dos tipos de trabalho não deve bloquear o navegador ao atualizar a tela.
132
132
133
133
No entanto, nem todos os efeitos podem ser adiados. Por exemplo, uma alteração no DOM visível para o usuário, deve disparar sincronizadamente antes da próxima renderização, para que o usuário não perceba uma inconsistência visual. (A distinção é conceitualmente semelhante a ouvintes de eventos ativos vs passivos.) Para estes tipos de efeitos, React fornece um Hook adicional chamado [`useLayoutEffect`](#uselayouteffect). Tem a mesma estrutura que `useEffect`, mas é diferente quando disparado.
134
134
135
135
Embora `useEffect` seja adiado até a próxima renderização do navegador, é mais garantido disparar antes de qualquer nova renderização. React sempre apagará os efeitos de uma renderização anterior antes de iniciar uma nova atualização.
136
136
137
-
#### Disparando um efeito condicionalmente {#conditionally-firing-an-effect}
137
+
#### Disparando um Efeito Condicionalmente {#conditionally-firing-an-effect}
138
138
139
139
O comportamento padrão para efeitos é disparar o efeito após cada término de renderização. Desta maneira, o efeito é sempre recriado se uma das suas entradas mudar.
140
140
@@ -213,11 +213,11 @@ function Counter({initialCount}) {
213
213
}
214
214
```
215
215
216
-
#### Especificando um estado inicial {#specifying-the-initial-state}
216
+
#### Determinando o Estado Inicial {#specifying-the-initial-state}
217
217
218
218
Há duas diferentes maneiras para inicializar `useReducer``state`. Pode você escolher qualquer uma dependendo do seu caso de uso. A maneira mais simples é a de passar um estado inicial como segundo argumento:
219
219
220
-
```js
220
+
```js{3}
221
221
const [state, dispatch] = useReducer(
222
222
reducer,
223
223
{count: initialCount}
@@ -228,13 +228,13 @@ Há duas diferentes maneiras para inicializar `useReducer` `state`. Pode você e
228
228
>
229
229
> React não usa a convenção `state = initialState` popularizada pelo Redux. O valor inicial precisa às vezes, depender de props e, portanto é especificado a partir da chamada do Hook. Se você se sentir bem sobre isso, você pode chamar `useReducer(reducer, undefined, reducer)` para simular o comportamento do Redux, mas não encorajamos isso.
Você pode também criar um estado inicial mais lento. Para fazer isso, você pode passar uma função `init` como terceiro argumento. O estado inicial será setado para `init(initialArg)`.
234
234
235
235
Isso nós permite extrair a lógica que calcula o estado inicial para fora do `reducer`. Isso é útil também para resetar um estado depois da resposta de uma ação:
236
236
237
-
```js
237
+
```js{1-3,11-12,21,26}
238
238
function init(initialCount) {
239
239
return {count: initialCount};
240
240
}
@@ -261,6 +261,7 @@ function Counter({initialCount}) {
@@ -270,9 +271,9 @@ function Counter({initialCount}) {
270
271
}
271
272
```
272
273
273
-
#### Pulando fora da ação {#bailing-out-of-a-dispatch}
274
+
#### Pulando Fora da Ação {#bailing-out-of-a-dispatch}
274
275
275
-
Se você retornar o mesmo valor do Hook Reducer que o valor do `state` atual, React irá pular a ação sem renderizar os filhos ou disparar os efeitos. (React usa o [`Object.is` algorito de comparação](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#Description).)
276
+
Se você retornar o mesmo valor do Hook Reducer que o valor do `state` atual, React irá pular a ação sem renderizar os filhos ou disparar os efeitos. (React usa o algoritimo de comparação [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#Description).)
276
277
277
278
278
279
### `useCallback` {#usecallback}
@@ -329,7 +330,6 @@ Um caso comum de uso é o acesso imperativamente a um componente filho:
329
330
```js
330
331
functionTextInputWithFocusButton() {
331
332
constinputEl=useRef(null);
332
-
333
333
const=> {
334
334
// `current` aponta para o evento de `focus` gerado pelo campo de texto
@@ -411,9 +410,9 @@ function useFriendStatus(friendID) {
411
410
412
411
> Dica
413
412
>
414
-
> Não recomendamos adicionar valores de depuração (`debug`) a cada custom hook criado. É mais valioso para `custom hooks` que são partes de bibliotecas compartilhas.
413
+
> Não recomendamos adicionar valores de depuração a cada custom hook criado. É mais valioso para `custom hooks` que são partes de bibliotecas compartilhas.
415
414
416
-
#### Adiar a formatação de valores de depuração(debug)
415
+
#### Adiar a formatação de valores de depuração
417
416
418
417
Em alguns casos, exibir um valor formatado pode ser uma operação cara. Também é desnecessário a menos que um hook seja realmente inspecionado.
0 commit comments