Skip to content

Commit a3f3875

Browse files
Translate cloneElement.md to Portuguese (#1059)
1 parent 2a44161 commit a3f3875

File tree

1 file changed

+51
-52
lines changed

1 file changed

+51
-52
lines changed

src/content/reference/react/cloneElement.md

Lines changed: 51 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ title: cloneElement
44

55
<Pitfall>
66

7-
Using `cloneElement` is uncommon and can lead to fragile code. [See common alternatives.](#alternatives)
7+
Usar `cloneElement` é incomum e pode levar a um código frágil. [Veja alternativas comuns.](#alternatives)
88

99
</Pitfall>
1010

1111
<Intro>
1212

13-
`cloneElement` lets you create a new React element using another element as a starting point.
13+
`cloneElement` permite que você crie um novo Elemento React usando outro elemento como ponto de partida.
1414

1515
```js
1616
const clonedElement = cloneElement(element, props, ...children)
@@ -22,11 +22,11 @@ const clonedElement = cloneElement(element, props, ...children)
2222

2323
---
2424

25-
## Reference {/*reference*/}
25+
## Referência {/*reference*/}
2626

2727
### `cloneElement(element, props, ...children)` {/*cloneelement*/}
2828

29-
Call `cloneElement` to create a React element based on the `element`, but with different `props` and `children`:
29+
Chame `cloneElement` para criar um Elemento React com base no `element`, mas com diferentes `props` e `children`:
3030

3131
```js
3232
import { cloneElement } from 'react';
@@ -43,42 +43,42 @@ const clonedElement = cloneElement(
4343
console.log(clonedElement); // <Row title="Cabbage" isHighlighted={true}>Goodbye</Row>
4444
```
4545

46-
[See more examples below.](#usage)
46+
[Veja mais exemplos abaixo.](#usage)
4747

48-
#### Parameters {/*parameters*/}
48+
#### Parâmetros {/*parameters*/}
4949

50-
* `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`.
5151

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.
5353

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.
5555

56-
#### Returns {/*returns*/}
56+
#### Retorna {/*returns*/}
5757

58-
`cloneElement` returns a React element object with a few properties:
58+
`cloneElement` retorna um objeto Elemento React com algumas propriedades:
5959

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`.
6464

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.
6666

67-
#### Caveats {/*caveats*/}
67+
#### Ressalvas {/*caveats*/}
6868

69-
* Cloning an element **does not modify the original element.**
69+
* Clonar um elemento **não modifica o elemento original.**
7070

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.
7272

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.**
7474

7575
---
7676

77-
## Usage {/*usage*/}
77+
## Uso {/*usage*/}
7878

79-
### Overriding props of an element {/*overriding-props-of-an-element*/}
79+
### Substituindo as props de um elemento {/*overriding-props-of-an-element*/}
8080

81-
To override the props of some <CodeStep step={1}>React element</CodeStep>, pass it to `cloneElement` with the <CodeStep step={2}>props you want to override</CodeStep>:
81+
Para substituir as props de algum <CodeStep step={1}>Elemento React</CodeStep>, passe-o para `cloneElement` com as <CodeStep step={2}>props que você deseja substituir</CodeStep>:
8282

8383
```js [[1, 5, "<Row title=\\"Cabbage\\" />"], [2, 6, "{ isHighlighted: true }"], [3, 4, "clonedElement"]]
8484
import { cloneElement } from 'react';
@@ -90,11 +90,11 @@ const clonedElement = cloneElement(
9090
);
9191
```
9292

93-
Here, the resulting <CodeStep step={3}>cloned element</CodeStep> will be `<Row title="Cabbage" isHighlighted={true} />`.
93+
Aqui, o <CodeStep step={3}>elemento clonado</CodeStep> resultante será `<Row title="Cabbage" isHighlighted={true} />`.
9494

95-
**Let's walk through an example to see when it's useful.**
95+
**Vamos analisar um exemplo para ver quando isso é útil.**
9696

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`:
9898

9999
```js {6-8}
100100
export default function List({ children }) {
@@ -108,7 +108,7 @@ export default function List({ children }) {
108108
)}
109109
```
110110
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:
112112
113113
```js {2-4}
114114
<List>
@@ -118,7 +118,7 @@ Let's say the original JSX received by `List` looks like this:
118118
</List>
119119
```
120120
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:
122122
123123
```js {4,8,12}
124124
<List>
@@ -137,7 +137,7 @@ By cloning its children, the `List` can pass extra information to every `Row` in
137137
</List>
138138
```
139139
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:
141141
142142
<Sandpack>
143143
@@ -232,21 +232,21 @@ button {
232232
233233
</Sandpack>
234234
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.
236236
237237
<Pitfall>
238238
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)
240240
241241
</Pitfall>
242242
243243
---
244244
245-
## Alternatives {/*alternatives*/}
245+
## Alternativas {/*alternatives*/}
246246
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*/}
248248
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:
250250
251251
```js {1,7}
252252
export default function List({ items, renderItem }) {
@@ -259,7 +259,7 @@ export default function List({ items, renderItem }) {
259259
})}
260260
```
261261
262-
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:
263263
264264
```js {3,7}
265265
<List
@@ -274,7 +274,7 @@ The `renderItem` prop is called a "render prop" because it's a prop that specifi
274274
/>
275275
```
276276
277-
The end result is the same as with `cloneElement`:
277+
O resultado final é o mesmo que com `cloneElement`:
278278
279279
```js {4,8,12}
280280
<List>
@@ -293,7 +293,7 @@ The end result is the same as with `cloneElement`:
293293
</List>
294294
```
295295
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.
297297
298298
<Sandpack>
299299
@@ -389,22 +389,21 @@ button {
389389
390390
</Sandpack>
391391
392-
This pattern is preferred to `cloneElement` because it is more explicit.
392+
Esse padrão é preferido ao `cloneElement` porque é mais explícito.
393393
394394
---
395395
396-
### Passing data through context {/*passing-data-through-context*/}
396+
### Passando dados através do contexto {/*passing-data-through-context*/}
397397
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)
399399
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`:
402401
403402
```js
404403
export const HighlightContext = createContext(false);
405404
```
406405
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`:
408407
409408
```js {8,10}
410409
export default function List({ items, renderItem }) {
@@ -421,15 +420,15 @@ export default function List({ items, renderItem }) {
421420
})}
422421
```
423422
424-
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:
425424
426425
```js src/Row.js {2}
427426
export default function Row({ title }) {
428427
const isHighlighted = useContext(HighlightContext);
429428
// ...
430429
```
431430
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>`:
433432
434433
```js {4}
435434
<List
@@ -440,7 +439,7 @@ This allows the calling component to not know or worry about passing `isHighligh
440439
/>
441440
```
442441
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.
444443
445444
<Sandpack>
446445
@@ -550,13 +549,13 @@ button {
550549
551550
</Sandpack>
552551
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)
554553
555554
---
556555
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*/}
558557
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:
560559
561560
```js
562561
import { useState } from 'react';
@@ -575,7 +574,7 @@ export default function useList(items) {
575574
}
576575
```
577576
578-
Then you could use it like this:
577+
Em seguida, você pode usá-lo assim:
579578
580579
```js {2,9,13}
581580
export default function App() {
@@ -598,7 +597,7 @@ export default function App() {
598597
}
599598
```
600599
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:
602601
603602
<Sandpack>
604603
@@ -691,4 +690,4 @@ button {
691690
692691
</Sandpack>
693692
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

Comments
 (0)