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/reference/eslint-plugin-react-hooks/lints/set-state-in-effect.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,60 +4,60 @@ title: set-state-in-effect
4
4
5
5
<Intro>
6
6
7
-
Validates against calling setState synchronously in an effect, which can lead to re-renders that degrade performance.
7
+
Valida contra a chamada síncrona de `setState` em um efeito, o que pode levar a re-renderizações que degradam o desempenho.
8
8
9
9
</Intro>
10
10
11
-
## Rule Details {/*rule-details*/}
11
+
## Detalhes da Regra {/*rule-details*/}
12
12
13
-
Setting state immediately inside an effect forces React to restart the entire render cycle. When you update state in an effect, React must re-render your component, apply changes to the DOM, and then run effects again. This creates an extra render pass that could have been avoided by transforming data directly during render or deriving state from props. Transform data at the top level of your component instead. This code will naturally re-run when props or state change without triggering additional render cycles.
13
+
Definir o estado imediatamente dentro de um efeito força o React a reiniciar todo o ciclo de renderização. Quando você atualiza o estado em um efeito, o React precisa re-renderizar seu componente, aplicar as alterações ao DOM e, em seguida, executar os efeitos novamente. Isso cria uma passagem de renderização extra que poderia ter sido evitada transformando dados diretamente durante a renderização ou derivando o estado das props. Transforme os dados no nível superior do seu componente. Este código será executado novamente naturalmente quando as props ou o estado mudarem, sem acionar ciclos de renderização adicionais.
14
14
15
-
Synchronous `setState`calls in effects trigger immediate re-renders before the browser can paint, causing performance issues and visual jank. React has to render twice: once to apply the state update, then again after effects run. This double rendering is wasteful when the same result could be achieved with a single render.
15
+
Chamadas síncronas de `setState`em efeitos acionam re-renderizações imediatas antes que o navegador possa pintar, causando problemas de desempenho e lentidão visual. O React precisa renderizar duas vezes: uma para aplicar a atualização de estado e, em seguida, novamente após a execução dos efeitos. Essa renderização dupla é desnecessária quando o mesmo resultado poderia ser alcançado com uma única renderização.
16
16
17
-
In many cases, you may also not need an effect at all. Please see [You Might Not Need an Effect](/learn/you-might-not-need-an-effect)for more information.
17
+
Em muitos casos, você também pode não precisar de um efeito. Consulte [Você Pode Não Precisar de um Efeito](/learn/you-might-not-need-an-effect)para mais informações.
18
18
19
-
## Common Violations {/*common-violations*/}
19
+
## Violações Comuns {/*common-violations*/}
20
20
21
-
This rule catches several patterns where synchronous setState is used unnecessarily:
21
+
Esta regra detecta vários padrões onde `setState` síncrono é usado desnecessariamente:
22
22
23
-
-Setting loading state synchronously
24
-
-Deriving state from props in effects
25
-
-Transforming data in effects instead of render
23
+
-Definindo estado de carregamento síncronamente
24
+
-Derivando estado de props em efeitos
25
+
-Transformando dados em efeitos em vez de na renderização
26
26
27
-
### Invalid {/*invalid*/}
27
+
### Inválido {/*invalid*/}
28
28
29
-
Examples of incorrect code for this rule:
29
+
Exemplos de código incorreto para esta regra:
30
30
31
31
```js
32
-
// ❌ Synchronous setState in effect
32
+
// ❌ setState síncrono em efeito
33
33
functionComponent({data}) {
34
34
const [items, setItems] =useState([]);
35
35
36
36
useEffect(() => {
37
-
setItems(data); //Extra render, use initial state instead
37
+
setItems(data); //Renderização extra, use o estado inicial em vez disso
38
38
}, [data]);
39
39
}
40
40
41
-
// ❌ Setting loading state synchronously
41
+
// ❌ Definindo estado de carregamento síncronamente
42
42
functionComponent() {
43
43
const [loading, setLoading] =useState(false);
44
44
45
45
useEffect(() => {
46
-
setLoading(true); //Synchronous, causes extra render
46
+
setLoading(true); //Síncrono, causa renderização extra
47
47
fetchData().then(() =>setLoading(false));
48
48
}, []);
49
49
}
50
50
51
-
// ❌ Transforming data in effect
51
+
// ❌ Transformando dados em efeito
52
52
functionComponent({rawData}) {
53
53
const [processed, setProcessed] =useState([]);
54
54
55
55
useEffect(() => {
56
-
setProcessed(rawData.map(transform)); //Should derive in render
56
+
setProcessed(rawData.map(transform)); //Deve ser derivado na renderização
57
57
}, [rawData]);
58
58
}
59
59
60
-
// ❌ Deriving state from props
60
+
// ❌ Derivando estado de props
61
61
functionComponent({selectedId, items}) {
62
62
const [selected, setSelected] =useState(null);
63
63
@@ -67,12 +67,12 @@ function Component({selectedId, items}) {
67
67
}
68
68
```
69
69
70
-
### Valid {/*valid*/}
70
+
### Válido {/*valid*/}
71
71
72
-
Examples of correct code for this rule:
72
+
Exemplos de código correto para esta regra:
73
73
74
74
```js
75
-
// ✅ setState in an effect is fine if the value comes from a ref
75
+
// ✅ setState em um efeito é aceitável se o valor vier de um ref
**When something can be calculated from the existing props or state, don't put it in state.** Instead, calculate it during rendering. This makes your code faster, simpler, and less error-prone. Learn more in [You Might Not Need an Effect](/learn/you-might-not-need-an-effect).
93
+
**Quando algo pode ser calculado a partir das props ou do estado existentes, não o coloque no estado.** Em vez disso, calcule-o durante a renderização. Isso torna seu código mais rápido, mais simples e menos propenso a erros. Saiba mais em [Você Pode Não Precisar de um Efeito](/learn/you-might-not-need-an-effect).
0 commit comments