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
*`element`: The `element`argument must be a valid React element. For example, it could be a JSX node like `<Something />`, the result of calling[`createElement`](/reference/react/createElement), or the result of another `cloneElement` call.
50
+
*`element`: O argumento `element`deve ser um Elemento React válido. Por exemplo, pode ser um nó JSX como `<Something />`, o resultado da chamada[`createElement`](/reference/react/createElement), ou o resultado de outra chamada de `cloneElement`.
51
51
52
-
*`props`: The `props`argument must either be an object or `null`. If you pass`null`, the cloned element will retain all of the original `element.props`. Otherwise, for every prop in the`props` object, the returned element will "prefer" the value from`props`over the value from`element.props`. The rest of the props will be filled from the original `element.props`. If you pass`props.key`or`props.ref`, they will replace the original ones.
52
+
*`props`: O argumento `props`deve ser um objeto ou `null`. Se você passar`null`, o elemento clonado reterá todas as `element.props` originais. Caso contrário, para cada prop no objeto`props`, o elemento retornado irá "preferir" o valor de`props`sobre o valor de`element.props`. O restante das props será preenchido a partir do `element.props` original. Se você passar`props.key`ou`props.ref`, eles substituirão as originais.
53
53
54
-
***optional**`...children`: Zero or more child nodes. They can be any React nodes, including React elements, strings, numbers, [portals](/reference/react-dom/createPortal), empty nodes (`null`, `undefined`, `true`, and`false`), and arrays of React nodes. If you don't pass any `...children` arguments, the original `element.props.children`will be preserved.
54
+
***opcional**`...children`: Zero ou mais nós filhos. Eles podem ser quaisquer nós React, incluindo Elementos React, strings, números, [portais](/reference/react-dom/createPortal), nós vazios (`null`, `undefined`, `true` e`false`), e arrays de nós React. Se você não passar nenhum argumento `...children`, o `element.props.children`original será preservado.
55
55
56
-
#### Returns {/*returns*/}
56
+
#### Retorna {/*returns*/}
57
57
58
-
`cloneElement`returns a React element object with a few properties:
58
+
`cloneElement`retorna um objeto Elemento React com algumas propriedades:
59
59
60
-
*`type`: Same as`element.type`.
61
-
*`props`: The result of shallowly merging `element.props`with the overriding `props`you have passed.
62
-
*`ref`: The original `element.ref`, unless it was overridden by`props.ref`.
63
-
*`key`: The original `element.key`, unless it was overridden by`props.key`.
60
+
*`type`: Igual a`element.type`.
61
+
*`props`: O resultado da mesclagem rasa de `element.props`com as `props`que você passou.
62
+
*`ref`: O `element.ref` original, a menos que fosse sobreposto por`props.ref`.
63
+
*`key`: O `element.key` original, a menos que fosse sobreposto por`props.key`.
64
64
65
-
Usually, you'll return the element from your component or make it a child of another element. Although you may read the element's properties, it's best to treat every element as opaque after it's created, and only render it.
65
+
Geralmente, você retornará o elemento do seu componente ou o tornará filho de outro elemento. Embora você possa ler as propriedades do elemento, é melhor tratar cada elemento como opaco após sua criação e apenas renderizá-lo.
66
66
67
-
#### Caveats {/*caveats*/}
67
+
#### Ressalvas {/*caveats*/}
68
68
69
-
*Cloning an element**does not modify the original element.**
69
+
*Clonar um elemento**não modifica o elemento original.**
70
70
71
-
*You should only**pass children as multiple arguments to`cloneElement`if they are all statically known,**like`cloneElement(element, null, child1, child2, child3)`. If your children are dynamic, pass the entire array as the third argument: `cloneElement(element, null, listItems)`. This ensures that React will [warn you about missing `key`s](/learn/rendering-lists#keeping-list-items-in-order-with-key)for any dynamic lists. For static lists this is not necessary because they never reorder.
71
+
*Você deve apenas**passar `children` como vários argumentos para`cloneElement`se eles forem todos estaticamente conhecidos,**como`cloneElement(element, null, child1, child2, child3)`. Se seus `children` forem dinâmicos, passe o array inteiro como o terceiro argumento: `cloneElement(element, null, listItems)`. Isso garante que o React irá [avisá-lo sobre `key`s ausentes](/learn/rendering-lists#keeping-list-items-in-order-with-key)para quaisquer listas dinâmicas. Para listas estáticas, isso não é necessário porque elas nunca são reordenadas.
72
72
73
-
*`cloneElement`makes it harder to trace the data flow, so**try the [alternatives](#alternatives)instead.**
73
+
*`cloneElement`dificulta o rastreamento do fluxo de dados, então**tente as [alternativas](#alternatives)em vez disso.**
74
74
75
75
---
76
76
77
-
## Usage {/*usage*/}
77
+
## Uso {/*usage*/}
78
78
79
-
### Overriding props of an element {/*overriding-props-of-an-element*/}
79
+
### Substituindo as props de um elemento {/*overriding-props-of-an-element*/}
80
80
81
-
To override the props of some <CodeStepstep={1}>React element</CodeStep>, pass it to `cloneElement`with the <CodeStepstep={2}>props you want to override</CodeStep>:
81
+
Para substituir as props de algum <CodeStepstep={1}>Elemento React</CodeStep>, passe-o para `cloneElement`com as <CodeStepstep={2}>props que você deseja substituir</CodeStep>:
Here, the resulting <CodeStepstep={3}>cloned element</CodeStep> will be`<Row title="Cabbage" isHighlighted={true} />`.
93
+
Aqui, o <CodeStepstep={3}>elemento clonado</CodeStep> resultante será`<Row title="Cabbage" isHighlighted={true} />`.
94
94
95
-
**Let's walk through an example to see when it's useful.**
95
+
**Vamos analisar um exemplo para ver quando isso é útil.**
96
96
97
-
Imagine a `List`component that renders its [`children`](/learn/passing-props-to-a-component#passing-jsx-as-children)as a list of selectable rows with a "Next" button that changes which row is selected. The `List`component needs to render the selected `Row`differently, so it clones every `<Row>`child that it has received, and adds an extra `isHighlighted: true`or`isHighlighted: false` prop:
97
+
Imagine um componente `List`que renderiza seus [`children`](/learn/passing-props-to-a-component#passing-jsx-as-children)como uma lista de linhas selecionáveis com um botão "Próximo" que altera qual linha é selecionada. O componente `List`precisa renderizar o `Row`selecionado de forma diferente, então ele clona cada filho `<Row>`que recebeu e adiciona uma prop extra `isHighlighted: true`ou`isHighlighted: false`:
98
98
99
99
```js {6-8}
100
100
exportdefaultfunctionList({ children }) {
@@ -108,7 +108,7 @@ export default function List({ children }) {
108
108
)}
109
109
```
110
110
111
-
Let's say the original JSX received by `List`looks like this:
111
+
Digamos que o JSX original recebido por `List`se pareça com isto:
112
112
113
113
```js {2-4}
114
114
<List>
@@ -118,7 +118,7 @@ Let's say the original JSX received by `List` looks like this:
118
118
</List>
119
119
```
120
120
121
-
By cloning its children, the`List`can pass extra information to every`Row`inside. The result looks like this:
121
+
Ao clonar seus filhos, o`List`pode passar informações extras para cada`Row`dentro. O resultado tem esta aparência:
122
122
123
123
```js {4,8,12}
124
124
<List>
@@ -137,7 +137,7 @@ By cloning its children, the `List` can pass extra information to every `Row` in
137
137
</List>
138
138
```
139
139
140
-
Notice how pressing "Next" updates the state of the `List`, and highlights a different row:
140
+
Observe como pressionar "Próximo" atualiza o estado do `List` e destaca uma linha diferente:
141
141
142
142
<Sandpack>
143
143
@@ -232,21 +232,21 @@ button {
232
232
233
233
</Sandpack>
234
234
235
-
To summarize, the`List`cloned the `<Row />`elements it received and added an extra prop to them.
235
+
Para resumir, o`List`clonou os elementos `<Row />`que recebeu e adicionou uma prop extra a eles.
236
236
237
237
<Pitfall>
238
238
239
-
Cloning children makes it hard to tell how the data flows through your app. Try one of the [alternatives.](#alternatives)
239
+
Clonar children torna difícil dizer como os dados fluem pelo seu app. Tente uma das [alternativas.](#alternatives)
240
240
241
241
</Pitfall>
242
242
243
243
---
244
244
245
-
## Alternatives {/*alternatives*/}
245
+
## Alternativas {/*alternatives*/}
246
246
247
-
### Passing data with a render prop {/*passing-data-with-a-render-prop*/}
247
+
### Passando dados com uma render prop {/*passing-data-with-a-render-prop*/}
248
248
249
-
Instead of using `cloneElement`, consider accepting a *render prop* like`renderItem`. Here, `List`receives`renderItem`as a prop. `List`calls`renderItem`for every item and passes`isHighlighted`as an argument:
249
+
Em vez de usar `cloneElement`, considere aceitar uma *render prop* como`renderItem`. Aqui, `List`recebe`renderItem`como uma prop. `List`chama`renderItem`para cada item e passa`isHighlighted`como um argumento:
The `renderItem`prop is called a "render prop" because it's a prop that specifies how to render something. For example, you can pass a `renderItem`implementation that renders a `<Row>`with the given`isHighlighted` value:
262
+
A prop `renderItem`é chamada de "render prop" porque é uma prop que especifica como renderizar algo. Por exemplo, você pode passar uma implementação `renderItem`que renderiza um `<Row>`com o valor`isHighlighted` fornecido:
263
263
264
264
```js {3,7}
265
265
<List
@@ -274,7 +274,7 @@ The `renderItem` prop is called a "render prop" because it's a prop that specifi
274
274
/>
275
275
```
276
276
277
-
The end result is the same as with`cloneElement`:
277
+
O resultado final é o mesmo que com`cloneElement`:
278
278
279
279
```js {4,8,12}
280
280
<List>
@@ -293,7 +293,7 @@ The end result is the same as with `cloneElement`:
293
293
</List>
294
294
```
295
295
296
-
However, you can clearly trace where the `isHighlighted`value is coming from.
296
+
No entanto, você pode rastrear claramente de onde o valor `isHighlighted`vem.
297
297
298
298
<Sandpack>
299
299
@@ -389,22 +389,21 @@ button {
389
389
390
390
</Sandpack>
391
391
392
-
This pattern is preferred to`cloneElement`because it is more explicit.
392
+
Esse padrão é preferido ao`cloneElement`porque é mais explícito.
393
393
394
394
---
395
395
396
-
### Passing data through context {/*passing-data-through-context*/}
396
+
### Passando dados através do contexto {/*passing-data-through-context*/}
397
397
398
-
Another alternative to`cloneElement`is to [pass data through context.](/learn/passing-data-deeply-with-context)
398
+
Outra alternativa para`cloneElement`é [passar dados através do contexto.](/learn/passing-data-deeply-with-context)
399
399
400
-
401
-
For example, you can call [`createContext`](/reference/react/createContext) to define a `HighlightContext`:
400
+
Por exemplo, você pode chamar [`createContext`](/reference/react/createContext) para definir um `HighlightContext`:
402
401
403
402
```js
404
403
exportconstHighlightContext=createContext(false);
405
404
```
406
405
407
-
Your `List`component can wrap every item it renders into a `HighlightContext` provider:
406
+
Seu componente `List`pode encapsular cada item que renderiza em um provedor `HighlightContext`:
With this approach, `Row`does not need to receive an `isHighlighted`prop at all. Instead, it reads the context:
423
+
Com essa abordagem, `Row`não precisa receber uma prop `isHighlighted`. Em vez disso, ele lê o contexto:
425
424
426
425
```js src/Row.js {2}
427
426
exportdefaultfunctionRow({ title }) {
428
427
constisHighlighted=useContext(HighlightContext);
429
428
// ...
430
429
```
431
430
432
-
This allows the calling component to not know or worry about passing `isHighlighted`to`<Row>`:
431
+
Isso permite que o componente de chamada não saiba ou se preocupe em passar `isHighlighted`para`<Row>`:
433
432
434
433
```js {4}
435
434
<List
@@ -440,7 +439,7 @@ This allows the calling component to not know or worry about passing `isHighligh
440
439
/>
441
440
```
442
441
443
-
Instead, `List`and`Row`coordinate the highlighting logic through context.
442
+
Em vez disso, `List`e`Row`coordenam a lógica de realce por meio do contexto.
444
443
445
444
<Sandpack>
446
445
@@ -550,13 +549,13 @@ button {
550
549
551
550
</Sandpack>
552
551
553
-
[Learn more about passing data through context.](/reference/react/useContext#passing-data-deeply-into-the-tree)
552
+
[Aprenda mais sobre como passar dados pelo contexto.](/reference/react/useContext#passing-data-deeply-into-the-tree)
554
553
555
554
---
556
555
557
-
### Extracting logic into a custom Hook {/*extracting-logic-into-a-custom-hook*/}
556
+
### Extraindo a lógica em um Hook personalizado {/*extracting-logic-into-a-custom-hook*/}
558
557
559
-
Another approach you can try is to extract the "non-visual" logic into your own Hook, and use the information returned by your Hook to decide what to render. For example, you could write a `useList`custom Hook like this:
558
+
Outra abordagem que você pode tentar é extrair a lógica "não visual" em seu próprio Hook e usar as informações retornadas pelo seu Hook para decidir o que renderizar. Por exemplo, você pode escrever um Hook personalizado `useList`assim:
560
559
561
560
```js
562
561
import { useState } from'react';
@@ -575,7 +574,7 @@ export default function useList(items) {
575
574
}
576
575
```
577
576
578
-
Then you could use it like this:
577
+
Em seguida, você pode usá-lo assim:
579
578
580
579
```js {2,9,13}
581
580
exportdefaultfunctionApp() {
@@ -598,7 +597,7 @@ export default function App() {
598
597
}
599
598
```
600
599
601
-
The data flow is explicit, but the state is inside the `useList`custom Hook that you can use from any component:
600
+
O fluxo de dados é explícito, mas o estado está dentro do Hook personalizado `useList`que você pode usar de qualquer componente:
602
601
603
602
<Sandpack>
604
603
@@ -691,4 +690,4 @@ button {
691
690
692
691
</Sandpack>
693
692
694
-
This approach is particularly useful if you want to reuse this logic between different components.
693
+
Essa abordagem é particularmente útil se você quiser reutilizar essa lógica entre diferentes componentes.
0 commit comments