Skip to content

Commit b4a40e5

Browse files
Merge pull request #71 from icarlossz/hooks-rules
Translated: Rules of hooks
2 parents 95c6a22 + e326a67 commit b4a40e5

File tree

1 file changed

+45
-45
lines changed

1 file changed

+45
-45
lines changed

content/docs/hooks-rules.md

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
11
---
22
id: hooks-rules
3-
title: Rules of Hooks
3+
title: Reglas de los Hooks
44
permalink: docs/hooks-rules.html
55
next: hooks-custom.html
66
prev: hooks-effect.html
77
---
88

9-
*Hooks* are a new addition in React 16.8. They let you use state and other React features without writing a class.
9+
Los *Hooks* son una de las próximas funcionalidades que te permitirá usar el estado y otras caracteristicas de React sin tener que escribir una clase. Actualmente están disponibles en la versión de React v16.8.0-alpha.1.
1010

11-
Hooks are JavaScript functions, but you need to follow two rules when using them. We provide a [linter plugin](https://www.npmjs.com/package/eslint-plugin-react-hooks) to enforce these rules automatically:
11+
Los Hooks son funciones de JavaScript, pero necesitas seguir dos reglas cuando los uses. Proporcionamos un [plugin de linter](https://www.npmjs.com/package/eslint-plugin-react-hooks) para hacer cumplir estas reglas automáticamente.
1212

13-
### Only Call Hooks at the Top Level {#only-call-hooks-at-the-top-level}
13+
### Llama Hooks solo en el nivel superior
1414

15-
**Don't call Hooks inside loops, conditions, or nested functions.** Instead, always use Hooks at the top level of your React function. By following this rule, you ensure that Hooks are called in the same order each time a component renders. That's what allows React to correctly preserve the state of Hooks between multiple `useState` and `useEffect` calls. (If you're curious, we'll explain this in depth [below](#explanation).)
15+
**No llames Hooks dentro de ciclos, condicionales, or funciones anidadas.** En vez de eso, usa siempre Hooks en el nivel superior de tu función en React. Siguiendo esta regla, te aseguras de que los hooks se llamen en el mismo orden cada vez que un componente se renderiza. Esto es lo que permite a React preservar correctamente el estado de los hooks entre multiples llamados a `useState` y `useEffect`. (Si eres curioso, vamos a explicar esto en detalle [más abajo](#explicación).)
1616

17-
### Only Call Hooks from React Functions {#only-call-hooks-from-react-functions}
17+
### Llama Hooks solo en funciones de React
1818

19-
**Don't call Hooks from regular JavaScript functions.** Instead, you can:
19+
**No llames Hooks desde funciones JavaScript regulares.** En vez de eso, puedes:
2020

21-
*Call Hooks from React function components.
22-
*Call Hooks from custom Hooks (we'll learn about them [on the next page](/docs/hooks-custom.html)).
21+
*Llama Hooks desde componentes funcionales de React.
22+
*Llama Hooks desde Hooks personalizados (aprenderemos acerca de ellos [en la siguiente página](/docs/hooks-custom.html)).
2323

24-
By following this rule, you ensure that all stateful logic in a component is clearly visible from its source code.
24+
Siguiendo esta regla, te aseguras de que toda la lógica del estado de un componente sea claramente visible desde tu código fuente.
2525

26-
## ESLint Plugin {#eslint-plugin}
26+
## Plugin de ESLint
2727

28-
We released an ESLint plugin called [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks) that enforces these two rules. You can add this plugin to your project if you'd like to try it:
28+
Lanzamos un plugin de ESLint llamado [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks) que refuerza estas dos reglas. Puedes añadir este plugin a tu proyecto si quieres probarlo:
2929

3030
```bash
3131
npm install eslint-plugin-react-hooks
3232
```
3333

3434
```js
35-
// Your ESLint configuration
35+
// Tu configuración de ESLint
3636
{
3737
"plugins": [
3838
// ...
@@ -45,28 +45,28 @@ npm install eslint-plugin-react-hooks
4545
}
4646
```
4747

48-
In the future, we intend to include this plugin by default into Create React App and similar toolkits.
48+
En el futuro, tenemos la intención de incluir este plugin por defecto en Create React App y otros paquetes similares.
4949

50-
**You can skip to the next page explaining how to write [your own Hooks](/docs/hooks-custom.html) now.** On this page, we'll continue by explaining the reasoning behind these rules.
50+
**Puedes pasar a la siguiente página donde explicamos como escribir [tus propios Hooks](/docs/hooks-custom.html) ahora mismo.** En esta página, vamos a continuar explicando el razonamiento detrás de estas reglas.
5151

52-
## Explanation {#explanation}
52+
## Explicación
5353

54-
As we [learned earlier](/docs/hooks-state.html#tip-using-multiple-state-variables), we can use multiple State or Effect Hooks in a single component:
54+
Como [aprendimos anteriormente](/docs/hooks-state.html#tip-using-multiple-state-variables), podemos usar multiples Hooks de Estado o Hooks de Efecto en un solo componente:
5555

5656
```js
5757
function Form() {
58-
// 1. Use the name state variable
58+
// 1. Usa la variable de estado del nombre
5959
const [name, setName] = useState('Mary');
6060

61-
// 2. Use an effect for persisting the form
61+
// 2. Usa un efecto para persistir el formulario
6262
useEffect(function persistForm() {
6363
localStorage.setItem('formData', name);
6464
});
6565

66-
// 3. Use the surname state variable
66+
// 3. Usa la variable de estado del apellido
6767
const [surname, setSurname] = useState('Poppins');
6868

69-
// 4. Use an effect for updating the title
69+
// 4. Usa un efecto para la actualización del título
7070
useEffect(function updateTitle() {
7171
document.title = name + ' ' + surname;
7272
});
@@ -75,63 +75,63 @@ function Form() {
7575
}
7676
```
7777

78-
So how does React know which state corresponds to which `useState` call? The answer is that **React relies on the order in which Hooks are called**. Our example works because the order of the Hook calls is the same on every render:
78+
Entonces, como hace React para saber cual estado corresponde a cual llamado del `useState`? La respuesta es que **React se basa en el orden en el cual los Hooks son llamados**. Nuestro ejemplo funciona porque el orden en los llamados de los Hooks son el mismo en cada render:
7979

8080
```js
8181
// ------------
82-
// First render
82+
// Primer render
8383
// ------------
84-
useState('Mary') // 1. Initialize the name state variable with 'Mary'
85-
useEffect(persistForm) // 2. Add an effect for persisting the form
86-
useState('Poppins') // 3. Initialize the surname state variable with 'Poppins'
87-
useEffect(updateTitle) // 4. Add an effect for updating the title
84+
useState('Mary') // 1. Inicializa la variable de estado del nombre con 'Mary'
85+
useEffect(persistForm) // 2. Agrega un efecto para persistir el formulario
86+
useState('Poppins') // 3. Inicializa la variable de estado del apellido con 'Poppins'
87+
useEffect(updateTitle) // 4. Agrega un efecto para la actualización del título
8888

8989
// -------------
90-
// Second render
90+
// Segundo render
9191
// -------------
92-
useState('Mary') // 1. Read the name state variable (argument is ignored)
93-
useEffect(persistForm) // 2. Replace the effect for persisting the form
94-
useState('Poppins') // 3. Read the surname state variable (argument is ignored)
95-
useEffect(updateTitle) // 4. Replace the effect for updating the title
92+
useState('Mary') // 1. Lee la variable de estado del nombre (el argumento es ignorado)
93+
useEffect(persistForm) // 2. Reemplaza el efecto para persistir el formulario
94+
useState('Poppins') // 3. Lee la variable de estado del apellido (el argumento es ignorado)
95+
useEffect(updateTitle) // 4. Reemplaza el efecto de actualización del título
9696

9797
// ...
9898
```
9999

100-
As long as the order of the Hook calls is the same between renders, React can associate some local state with each of them. But what happens if we put a Hook call (for example, the `persistForm` effect) inside a condition?
100+
Siempre y cuando el orden de los llamados a los Hooks sean los mismos entre renders, React puede asociar algún estado local con cada uno de ellos. Pero que pasa si ponemos la llamada a un Hook (por ejemplo, el efecto `persistForm`) dentro de una condición?
101101

102102
```js
103-
// 🔴 We're breaking the first rule by using a Hook in a condition
103+
// 🔴 Estamos rompiendo la primera regla al usar un Hook en una condición
104104
if (name !== '') {
105105
useEffect(function persistForm() {
106106
localStorage.setItem('formData', name);
107107
});
108108
}
109109
```
110110

111-
The `name !== ''` condition is `true` on the first render, so we run this Hook. However, on the next render the user might clear the form, making the condition `false`. Now that we skip this Hook during rendering, the order of the Hook calls becomes different:
111+
La condición `name !== ''` es `true` en el primer render, entonces corremos el Hook. Sin embargo, en el siguiente render el usuario puede borrar el formulario, haciendo la condición `false`. Ahora que nos saltamos este Hook durante el renderizado, el orden de las llamadas a los Hooks se vuelve diferente:
112112

113113
```js
114-
useState('Mary') // 1. Read the name state variable (argument is ignored)
115-
// useEffect(persistForm) // 🔴 This Hook was skipped!
116-
useState('Poppins') // 🔴 2 (but was 3). Fail to read the surname state variable
117-
useEffect(updateTitle) // 🔴 3 (but was 4). Fail to replace the effect
114+
useState('Mary') // 1. Lee la variable de estado del nombre (el argumento es ignorado)
115+
// useEffect(persistForm) // 🔴 Este Hook fue saltado
116+
useState('Poppins') // 🔴 2 (pero era el 3). Falla la lectura de la variable de estado del apellido
117+
useEffect(updateTitle) // 🔴 3 (pero era el 4). Falla el reemplazo del efecto
118118
```
119119

120-
React wouldn't know what to return for the second `useState` Hook call. React expected that the second Hook call in this component corresponds to the `persistForm` effect, just like during the previous render, but it doesn't anymore. From that point, every next Hook call after the one we skipped would also shift by one, leading to bugs.
120+
React no sabría que devolver para la segunda llamada del Hook `useState`. React esperaba que la segunda llamada al Hook en este componente corresponda al efecto `persistForm`, igual que en el render anterior, pero ya no lo hace. A partir de este punto, cada siguiente llamada de un Hook después de la que nos saltamos también cambiaría de puesto por uno, lo que llevaría a la aparición de errores.
121121

122-
**This is why Hooks must be called on the top level of our components.** If we want to run an effect conditionally, we can put that condition *inside* our Hook:
122+
**Es por esto que los Hooks deben ser utilizados en el nivel superior de nuestros componentes.** Si queremos ejecutar un efecto condicionalmente, podemos poner esa condición *dentro* de nuestro Hook:
123123

124124
```js
125125
useEffect(function persistForm() {
126-
// 👍 We're not breaking the first rule anymore
126+
// 👍 No vamos a romper la primera regla nunca más.
127127
if (name !== '') {
128128
localStorage.setItem('formData', name);
129129
}
130130
});
131131
```
132132

133-
**Note that you don't need to worry about this problem if you use the [provided lint rule](https://www.npmjs.com/package/eslint-plugin-react-hooks).** But now you also know *why* Hooks work this way, and which issues the rule is preventing.
133+
**Ten en cuenta que no necesitas preocuparte por este problema si usas las [reglas de lint provistas](https://www.npmjs.com/package/eslint-plugin-react-hooks).** Pero ahora también sabes *por qué* los Hooks funcionan de esta manera, y cuáles son los problemas que la primera regla está impidiendo.
134134

135-
## Next Steps {#next-steps}
135+
## Siguientes pasos
136136

137-
Finally, we're ready to learn about [writing your own Hooks](/docs/hooks-custom.html)! Custom Hooks let you combine Hooks provided by React into your own abstractions, and reuse common stateful logic between different components.
137+
Finalmente, estamos listos para aprender acerca de cómo [escribir nuestros propios Hooks](/docs/hooks-custom.html)! Los Hooks personalizados te permiten combinar los Hooks proporcionados por React en sus propias abstracciones y reutilizar la lógica de estado común entre los diferentes componentes.

0 commit comments

Comments
 (0)