This repository has been archived by the owner on Apr 21, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #79 from nglvnyls/traduccio-docs_forwarding-refs
Traduccio_docs/Fowarding_Ref
- Loading branch information
Showing
1 changed file
with
32 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,76 +1,76 @@ | ||
--- | ||
id: forwarding-refs | ||
title: Forwarding Refs | ||
title: Reenviament de Refs | ||
permalink: docs/forwarding-refs.html | ||
--- | ||
|
||
Ref forwarding is a technique for automatically passing a [ref](/docs/refs-and-the-dom.html) through a component to one of its children. This is typically not necessary for most components in the application. However, it can be useful for some kinds of components, especially in reusable component libraries. The most common scenarios are described below. | ||
El reenviament de referències és una tècnica per passar automàticament una [ref](/docs/refs-and-the-dom.html) a través d'un component a un dels seus fills. Això normalment no és necessari per a la majoria dels components de l'aplicació. Tanmateix, pot ser útil per a alguns tipus de components, especialment en biblioteques de components reutilitzables. Els escenaris més comuns es descriuen a continuació. | ||
|
||
## Forwarding refs to DOM components {#forwarding-refs-to-dom-components} | ||
## Reenviament de referències als components del DOM {#forwarding-refs-to-dom-components} | ||
|
||
Consider a `FancyButton` component that renders the native `button` DOM element: | ||
Considera un component (BotoElegant)`FancyButton` que renderitza l'element `button` nadiu del DOM: | ||
`embed:forwarding-refs/fancy-button-simple.js` | ||
|
||
React components hide their implementation details, including their rendered output. Other components using `FancyButton` **usually will not need to** [obtain a ref](/docs/refs-and-the-dom.html) to the inner `button` DOM element. This is good because it prevents components from relying on each other's DOM structure too much. | ||
Els components de React amaguen els seus detalls d'implementació, incloent la seva sortida renderitzada. Altres components que fan servir el `FancyButton` **normalment no caldrà** [que obtenguin una ref](/docs/refs-and-the-dom.html) a l'element intern `button` del DOM. Això és bo perquè evita que els components es basin massa en l'estructura DOM dels altres. | ||
|
||
Although such encapsulation is desirable for application-level components like `FeedStory` or `Comment`, it can be inconvenient for highly reusable "leaf" components like `FancyButton` or `MyTextInput`. These components tend to be used throughout the application in a similar manner as a regular DOM `button` and `input`, and accessing their DOM nodes may be unavoidable for managing focus, selection, or animations. | ||
Encara que aquesta encapsulació és desitjable per a components de nivell d'aplicació com `ElMeuTema` o `Comentari`, pot ser inconvenient per a components molt reutilitzables com `BotoElegant` o `ElMeuInputDeText`. Aquests components tendeixen a ser utilitzats en tota l'aplicació d'una manera similar a un `button` i `input` DOM, i accedir als seus nodes DOM pot ser inevitable per gestionar el focus, la selecció o les animacions. | ||
|
||
**Ref forwarding is an opt-in feature that lets some components take a `ref` they receive, and pass it further down (in other words, "forward" it) to a child.** | ||
**El reenviament de ref és una característica opcional que permet a alguns components prendre una `ref` que reben, i passar-la més avall (en altres paraules, "reenviant" a un component fill.** | ||
|
||
In the example below, `FancyButton` uses `React.forwardRef` to obtain the `ref` passed to it, and then forward it to the DOM `button` that it renders: | ||
A l'exemple de sota el component (BotoElegant) `FancyButton` utilitza `React.forwardRef` per obtenir la `ref` que se li ha passat, i després es dirigeix al `button` del DOM que el renderitza: | ||
|
||
`embed:forwarding-refs/fancy-button-simple-ref.js` | ||
|
||
This way, components using `FancyButton` can get a ref to the underlying `button` DOM node and access it if necessary—just like if they used a DOM `button` directly. | ||
D'aquesta manera, els components que utilitzen `FancyButton` poden obtenir una referència al node subjacent `button` del DOM i accedir-hi si és necessari, igual que si utilitzen un `button` del DOM directament. | ||
|
||
Here is a step-by-step explanation of what happens in the above example: | ||
A continuació hi trobaràs una explicació pas a pas del que passa a l'exemple anterior: | ||
|
||
1. We create a [React ref](/docs/refs-and-the-dom.html) by calling `React.createRef` and assign it to a `ref` variable. | ||
1. We pass our `ref` down to `<FancyButton ref={ref}>` by specifying it as a JSX attribute. | ||
1. React passes the `ref` to the `(props, ref) => ...` function inside `forwardRef` as a second argument. | ||
1. We forward this `ref` argument down to `<button ref={ref}>` by specifying it as a JSX attribute. | ||
1. When the ref is attached, `ref.current` will point to the `<button>` DOM node. | ||
1. Creem una [ref de React](/docs/refs-and-the-dom.html) cridant `React.createRef` i assignant-la a una variable `ref`. | ||
1. Passem la nostra `ref` a `<FancyButton ref={ref}>` especificant-la com un atribut JSX. | ||
1. React passa la `ref` a la funció `(props, ref) => ...` dins de `forwardRef` com a segon argument. | ||
1. Reenviem aquest argument `ref` avall fins a `<button ref={ref}>` lligant-lo com un atribut JSX. | ||
1. Quan la referència estigui lligada , `ref.current` apuntarà al node `<button>` del DOM. | ||
|
||
>Note | ||
>Nota | ||
> | ||
>The second `ref` argument only exists when you define a component with `React.forwardRef` call. Regular function or class components don't receive the `ref` argument, and ref is not available in props either. | ||
>El segon argument `ref` només existeix quan definiu un component amb la crida `React.forwardRef`. Ni les funcions normals ni els components de classe reben l'argument `ref`, i la referència tampoc està disponible en les `props`. | ||
> | ||
>Ref forwarding is not limited to DOM components. You can forward refs to class component instances, too. | ||
>El reenviament de referències no està limitat als components del DOM. També podeu reenviar referències a instàncies de components de classe. | ||
## Note for component library maintainers {#note-for-component-library-maintainers} | ||
## Nota pels mantenidors de biblioteques de components {#note-for-component-library-maintainers} | ||
|
||
**When you start using `forwardRef` in a component library, you should treat it as a breaking change and release a new major version of your library.** This is because your library likely has an observably different behavior (such as what refs get assigned to, and what types are exported), and this can break apps and other libraries that depend on the old behavior. | ||
**Quan comencis a fer servir `forwardRef` en una biblioteca de components hauries de tractar-la com un canvi incompatible i publicar una nova versió major de la teva biblioteca.** Això es deu al fet que la teva biblioteca probablement tindrà un comportament molt diferent (com ara a quins elements s'assignen les refs i a quins tipus s'exporten), i això pot fer incompatibles altres aplicacions i biblioteques que depenen del comportament antic. | ||
|
||
Conditionally applying `React.forwardRef` when it exists is also not recommended for the same reasons: it changes how your library behaves and can break your users' apps when they upgrade React itself. | ||
Aplicar condicionadament `React.forwardRef` quan existeix no es recomana per les mateixes raons: canvia el comportament de la biblioteca i pot fer incompatibles les aplicacions dels usuaris quan actualitzin el mateix React. | ||
|
||
## Forwarding refs in higher-order components {#forwarding-refs-in-higher-order-components} | ||
## Reenviament de Referències en components d'ordre superior {#forwarding-refs-in-higher-order-components} | ||
|
||
This technique can also be particularly useful with [higher-order components](/docs/higher-order-components.html) (also known as HOCs). Let's start with an example HOC that logs component props to the console: | ||
Aquesta tècnica també pot ser particularment útil amb [components d'ordre superior](/docs/higher-order-components.html) (també coneguts com a HOCs). Comencem amb un exemple HOC que mostra a console les `props` dels components que embolica: | ||
`embed:forwarding-refs/log-props-before.js` | ||
|
||
The "logProps" HOC passes all `props` through to the component it wraps, so the rendered output will be the same. For example, we can use this HOC to log all props that get passed to our "fancy button" component: | ||
L'HOC "logProps" mostra totes les `props` del component que embolica, de manera que la sortida renderitzada serà la mateixa. Per exemple, podem utilitzar aquest HOC per mostrar totes les `props` que es passen al nostre component de "botó elegant": | ||
`embed:forwarding-refs/fancy-button.js` | ||
|
||
There is one caveat to the above example: refs will not get passed through. That's because `ref` is not a prop. Like `key`, it's handled differently by React. If you add a ref to a HOC, the ref will refer to the outermost container component, not the wrapped component. | ||
Hi ha, però, un problema a l'exemple anterior: les referències no es passaran. Això és perquè `ref` no és una `prop`. Igual que `key`, és gestionat de manera diferent per React. Si afegiu una referència a un HOC, la referència es refereix al component de contenidor més extern, no al component embolicat. | ||
|
||
This means that refs intended for our `FancyButton` component will actually be attached to the `LogProps` component: | ||
Això significa que les referències destinades al nostre component `FancyButton` s'afegiran al component `LogProps`: | ||
`embed:forwarding-refs/fancy-button-ref.js` | ||
|
||
Fortunately, we can explicitly forward refs to the inner `FancyButton` component using the `React.forwardRef` API. `React.forwardRef` accepts a render function that receives `props` and `ref` parameters and returns a React node. For example: | ||
Per sort, però, podem reenviar explícitament les referències al component interior `FancyButton` utilitzant l'API `React.forwardRef`. `React.forwardRef` accepta una funció de renderització que rep els paràmetres `props` i `ref` i retorna un node React. Per exemple: | ||
`embed:forwarding-refs/log-props-after.js` | ||
|
||
## Displaying a custom name in DevTools {#displaying-a-custom-name-in-devtools} | ||
## Mostrar un nom personalitzat a DevTools {#displaying-a-custom-name-in-devtools} | ||
|
||
`React.forwardRef` accepts a render function. React DevTools uses this function to determine what to display for the ref forwarding component. | ||
`React.forwardRef` accepta una funció de renderitzat. React DevTools utilitza aquesta funció per saber què ha de mostrar del component que fa el reenviament. | ||
|
||
For example, the following component will appear as "*ForwardRef*" in the DevTools: | ||
Per exemple, el component següent apareixerà com a "*ForwardRef*" en les DevTools: | ||
|
||
`embed:forwarding-refs/wrapped-component.js` | ||
|
||
If you name the render function, DevTools will also include its name (e.g. "*ForwardRef(myFunction)*"): | ||
Si dones nom a la funció de renderització, DevTools també n'inclourà el seu nom (e.g. "*ForwardRef(myFunction)*"): | ||
|
||
`embed:forwarding-refs/wrapped-component-with-function-name.js` | ||
|
||
You can even set the function's `displayName` property to include the component you're wrapping: | ||
Fins i tot pots establir la propietat `displayName` de la funció per incloure el component que està embolicat: | ||
|
||
`embed:forwarding-refs/customized-display-name.js` |