Skip to content

Commit 180b6fb

Browse files
authored
Merge branch 'main' into sync-4c91abc7
2 parents cf5b049 + 92666a0 commit 180b6fb

File tree

5 files changed

+136
-136
lines changed

5 files changed

+136
-136
lines changed

src/content/reference/react-dom/hooks/useFormStatus.md

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ canary: true
55

66
<Canary>
77

8-
The `useFormStatus` Hook is currently only available in React's Canary and experimental channels. Learn more about [React's release channels here](/community/versioning-policy#all-release-channels).
8+
El Hook `useFormStatus` está actualmente disponible solo en React Canary y canales experimentales. Aprende más sobre los [canales de lanzamiento de React aquí](/community/versioning-policy#all-release-channels).
99

1010
</Canary>
1111

1212
<Intro>
1313

14-
`useFormStatus` is a Hook that gives you status information of the last form submission.
14+
`useFormStatus` es un Hook que brinda información de estado del último formulario enviado.
1515

1616
```js
1717
const { pending, data, method, action } = useFormStatus();
@@ -23,19 +23,19 @@ const { pending, data, method, action } = useFormStatus();
2323

2424
---
2525

26-
## Reference {/*reference*/}
26+
## Referencia {/*reference*/}
2727

2828
### `useFormStatus()` {/*use-form-status*/}
2929

30-
The `useFormStatus` Hook provides status information of the last form submission.
30+
El Hook `useFormStatus` provee información de estado del último formulario enviado.
3131

3232
```js {5},[[1, 6, "status.pending"]]
3333
import { useFormStatus } from "react-dom";
3434
import action from './actions';
3535

3636
function Submit() {
3737
const status = useFormStatus();
38-
return <button disabled={status.pending}>Submit</button>
38+
return <button disabled={status.pending}>Enviar</button>
3939
}
4040

4141
export default function App() {
@@ -47,42 +47,42 @@ export default function App() {
4747
}
4848
```
4949

50-
To get status information, the `Submit` component must be rendered within a `<form>`. The Hook returns information like the <CodeStep step={1}>`pending`</CodeStep> property which tells you if the form is actively submitting.
50+
Para obtener información de estado, el componente de `Enviar` tiene que ser renderizado dentro de un `<form>`. El Hook retorna información como la propiedad <CodeStep step={1}>`pending`</CodeStep> que te dice si el formulario se está enviando activamente.
5151

52-
In the above example, `Submit` uses this information to disable `<button>` presses while the form is submitting.
52+
En el ejemplo de arriba, `Enviar` usa esta información para deshabilitar la pulsación de `<button>` mientras el formulario se está enviando.
5353

54-
[See more examples below.](#usage)
54+
[Ver más ejemplos abajo.](#usage)
5555

56-
#### Parameters {/*parameters*/}
56+
#### Parámetros {/*parameters*/}
5757

58-
`useFormStatus` does not take any parameters.
58+
`useFormStatus` no toma ningún parámetro.
5959

60-
#### Returns {/*returns*/}
60+
#### Retorna {/*returns*/}
6161

62-
A `status` object with the following properties:
62+
Un objeto de `status` con las siguientes propiedades:
6363

64-
* `pending`: A boolean. If `true`, this means the parent `<form>` is pending submission. Otherwise, `false`.
64+
* `pending`: Un booleano. Si es `true` significa que el `<form>` padre está pendiente de enviarse. De otro modo es `false`.
6565

66-
* `data`: An object implementing the [`FormData interface`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) that contains the data the parent `<form>` is submitting. If there is no active submission or no parent `<form>`, it will be `null`.
66+
* `data`:Un objeto que implementa la [`interfaz FormData`](https://developer.mozilla.org/es/docs/Web/API/FormData) que contiene los datos que el `<form>` padre está enviando. Si no hay ningún envío activo o no hay `<form>`, va a ser `null`.
6767

68-
* `method`: A string value of either `'get'` or `'post'`. This represents whether the parent `<form>` is submitting with either a `GET` or `POST` [HTTP method](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods). By default, a `<form>` will use the `GET` method and can be specified by the [`method`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#method) property.
68+
* `method`: El valor de un string ya sea `'get'` o `'post'`. Este representa si el `<form>` se está enviando con el [método HTTP](https://developer.mozilla.org/es/docs/Web/HTTP/Methods) `GET` o `POST`. Por defecto, un `<form>` va a usar el método `GET` y puede estar especificado con la propiedad de [`method`](https://developer.mozilla.org/es/docs/Web/HTML/Element/form#method).
6969

7070
[//]: # (Link to `<form>` documentation. "Read more on the `action` prop on `<form>`.")
71-
* `action`: A reference to the function passed to the `action` prop on the parent `<form>`. If there is no parent `<form>`, the property is `null`. If there is a URI value provided to the `action` prop, or no `action` prop specified, `status.action` will be `null`.
71+
* `action`: Una referencia a la función que es pasada al prop de `action` en el `<form>` padre. Si no hay un `<form>` padre, la propiedad es `null`. Si se ha proporcionado un valor URI al prop de `action`, o no se ha especificado un prop de `action`, `status.action` va a ser `null`.
7272

73-
#### Caveats {/*caveats*/}
73+
#### Advertencias {/*caveats*/}
7474

75-
* The `useFormStatus` Hook must be called from a component that is rendered inside a `<form>`.
76-
* `useFormStatus` will only return status information for a parent `<form>`. It will not return status information for any `<form>` rendered in that same component or children components.
75+
* El Hook `useFormStatus` debe llamarse desde un componente que se renderiza dentro de un `<form>`.
76+
* `useFormStatus` solo retornará información de estado para un `<form>` padre. No retornará información de estado a ningún `<form>` renderizado en ese mismo componente o componente hijos.
7777

7878
---
7979

80-
## Usage {/*usage*/}
80+
## Uso {/*usage*/}
8181

82-
### Display a pending state during form submission {/*display-a-pending-state-during-form-submission*/}
83-
To display a pending state while a form is submitting, you can call the `useFormStatus` Hook in a component rendered in a `<form>` and read the `pending` property returned.
82+
### Muestra un estado pendiente durante el envío de un formulario {/*display-a-pending-state-during-form-submission*/}
83+
Para mostrar un estado pendiente mientras un formulario se está enviando, puedes llamar al Hook `useFormStatus` en un componente renderizado en un `<form>` y leer la propiedad `pending` que retorna.
8484

85-
Here, we use the `pending` property to indicate the form is submitting.
85+
Aquí, usamos la propiedad `pending` para indicar que el formulario se está enviando.
8686

8787
<Sandpack>
8888

@@ -94,7 +94,7 @@ function Submit() {
9494
const { pending } = useFormStatus();
9595
return (
9696
<button type="submit" disabled={pending}>
97-
{pending ? "Submitting..." : "Submit"}
97+
{pending ? "Enviando..." : "Enviar"}
9898
</button>
9999
);
100100
}
@@ -133,30 +133,30 @@ export async function submitForm(query) {
133133

134134
<Pitfall>
135135

136-
##### `useFormStatus` will not return status information for a `<form>` rendered in the same component. {/*useformstatus-will-not-return-status-information-for-a-form-rendered-in-the-same-component*/}
136+
##### `useFormStatus` no retorna información de estado a un `<form>` renderizado en el mismo componente. {/*useformstatus-will-not-return-status-information-for-a-form-rendered-in-the-same-component*/}
137137

138-
The `useFormStatus` Hook only returns status information for a parent `<form>` and not for any `<form>` rendered in the same component calling the Hook, or child components.
138+
El Hook `useFormStatus` solo retorna información de estado a un `<form>` padre y no para ningún `<form>` renderizado en el mismo componente que llama el Hook, o componentes hijos.
139139

140140
```js
141141
function Form() {
142-
// 🚩 `pending` will never be true
143-
// useFormStatus does not track the form rendered in this component
142+
// 🚩 `pending` nunca será true
143+
// useFormStatus no rastrea el formulario renderizado en este componente
144144
const { pending } = useFormStatus();
145145
return <form action={submit}></form>;
146146
}
147147
```
148148

149-
Instead call `useFormStatus` from inside a component that is located inside `<form>`.
149+
En su lugar llama a `useFormStatus` desde dentro de un componente que se encuentra dentro de un `<form>`.
150150

151151
```js
152152
function Submit() {
153-
// ✅ `pending` will be derived from the form that wraps the Submit component
153+
// ✅ `pending` se derivará del formulario que envuelve el componente Enviar
154154
const { pending } = useFormStatus();
155155
return <button disabled={pending}>...</button>;
156156
}
157157

158158
function Form() {
159-
// This is the <form> `useFormStatus` tracks
159+
// Este es el <form> que `useFormStatus` rastrea
160160
return (
161161
<form action={submit}>
162162
<Submit />
@@ -167,11 +167,11 @@ function Form() {
167167

168168
</Pitfall>
169169

170-
### Read the form data being submitted {/*read-form-data-being-submitted*/}
170+
### Lee los datos del formulario que se envían {/*read-form-data-being-submitted*/}
171171

172-
You can use the `data` property of the status information returned from `useFormStatus` to display what data is being submitted by the user.
172+
Puedes usar la propiedad `data` de la información de estado que retorna del `useFormStatus` para mostrar qué datos está siendo enviando por el usuario.
173173

174-
Here, we have a form where users can request a username. We can use `useFormStatus` to display a temporary status message confirming what username they have requested.
174+
Aquí, tenemos un formulario donde los usuarios pueden solicitar un nombre de usuario. Podemos usar `useFormStatus` para mostrar temporalmente un mensaje de estado que confirme qué nombre de usuario han solicitado.
175175

176176
<Sandpack>
177177

@@ -184,13 +184,13 @@ export default function UsernameForm() {
184184

185185
return (
186186
<div>
187-
<h3>Request a Username: </h3>
187+
<h3>Solicita un nombre de usuario: </h3>
188188
<input type="text" name="username" disabled={pending}/>
189189
<button type="submit" disabled={pending}>
190-
Submit
190+
Enviar
191191
</button>
192192
<br />
193-
<p>{data ? `Requesting ${data?.get("username")}...`: ''}</p>
193+
<p>{data ? `Solicitando ${data?.get("username")}...`: ''}</p>
194194
</div>
195195
);
196196
}
@@ -249,12 +249,12 @@ button {
249249
250250
---
251251
252-
## Troubleshooting {/*troubleshooting*/}
252+
## Solución de problemas {/*troubleshooting*/}
253253
254-
### `status.pending` is never `true` {/*pending-is-never-true*/}
254+
### `status.pending` nunca es `true` {/*pending-is-never-true*/}
255255
256-
`useFormStatus` will only return status information for a parent `<form>`.
256+
`useFormStatus` solo retornará información de estado a un `<form>` padre.
257257
258-
If the component that calls `useFormStatus` is not nested in a `<form>`, `status.pending` will always return `false`. Verify `useFormStatus` is called in a component that is a child of a `<form>` element.
258+
Si el componente que llama a `useFormStatus` no está anidado en un `<form>`, `status.pending` siempre retornará `false`. Verifica que `useFormStatus` está siendo llamado en un componente que es hijo de un elemento `<form>`.
259259
260-
`useFormStatus` will not track the status of a `<form>` rendered in the same component. See [Pitfall](#useformstatus-will-not-return-status-information-for-a-form-rendered-in-the-same-component) for more details.
260+
`useFormStatus` no rastreará al estado de un `<form>` renderizado en el mismo componente. Mira [Atención](#useformstatus-will-not-return-status-information-for-a-form-rendered-in-the-same-component) para más detalles.

src/content/reference/react/experimental_taintObjectReference.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,42 @@ title: experimental_taintObjectReference
44

55
<Wip>
66

7-
**This API is experimental and is not available in a stable version of React yet.**
7+
**Esta API es experimental y aún no está disponible en una versión estable de React.**
88

9-
You can try it by upgrading React packages to the most recent experimental version:
9+
Puedes probarla actualizando los paquetes de React a la versión experimental más reciente:
1010

1111
- `react@experimental`
1212
- `react-dom@experimental`
1313
- `eslint-plugin-react-hooks@experimental`
1414

15-
Experimental versions of React may contain bugs. Don't use them in production.
15+
Las versiones experimentales de React pueden contener errores. No las uses en producción.
1616

17-
This API is only available inside React Server Components.
17+
Esta API únicamente está disponible dentro de Componentes de Servidor en React
1818

1919
</Wip>
2020

2121

2222
<Intro>
2323

24-
`taintObjectReference` lets you prevent a specific object instance from being passed to a Client Component like a `user` object.
24+
`taintObjectReference` te permite evitar que una instancia específica de objeto sea pasada a un Componente Cliente, como un objecto `user`.
2525

2626
```js
2727
experimental_taintObjectReference(message, object);
2828
```
2929

30-
To prevent passing a key, hash or token, see [`taintUniqueValue`](/reference/react/experimental_taintUniqueValue).
30+
Para prevenir el pasar una llave, hash o token, ver [`taintUniqueValue`](/reference/react/experimental_taintUniqueValue).
3131

3232
</Intro>
3333

3434
<InlineToc />
3535

3636
---
3737

38-
## Reference {/*reference*/}
38+
## Referencia {/*reference*/}
3939

4040
### `taintObjectReference(message, object)` {/*taintobjectreference*/}
4141

42-
Call `taintObjectReference` with an object to register it with React as something that should not be allowed to be passed to the Client as is:
42+
Llama a `taintObjectReference` con un objeto para registrarlo en React como algo que no debería permitirse pasar al Cliente tal cual:
4343

4444
```js
4545
import {experimental_taintObjectReference} from 'react';
@@ -50,35 +50,35 @@ experimental_taintObjectReference(
5050
);
5151
```
5252

53-
[See more examples below.](#usage)
53+
[Ver más ejemplos abajo.](#usage)
5454

55-
#### Parameters {/*parameters*/}
55+
#### Parámetros {/*parameters*/}
5656

57-
* `message`: The message you want to display if the object gets passed to a Client Component. This message will be displayed as a part of the Error that will be thrown if the object gets passed to a Client Component.
57+
* `message`: El mensaje que deseas mostrar si el objeto se pasa a un Componente Cliente. Este mensaje se mostrará como parte del Error que se lanzará si el objeto se pasa a un Componente Cliente.
5858

59-
* `object`: The object to be tainted. Functions and class instances can be passed to `taintObjectReference` as `object`. Functions and classes are already blocked from being passed to Client Components but the React's default error message will be replaced by what you defined in `message`. When a specific instance of a Typed Array is passed to `taintObjectReference` as `object`, any other copies of the Typed Array will not be tainted.
59+
* `object`: El objeto a contaminar. Funciones e instancias de clases pueden ser pasadas a `taintObjectReference` como `object`. Las funciones y clases ya están bloqueadas para ser pasadas a Componentes Cliente, pero el mensaje de error predeterminado de React será reemplazado por lo que hayas definido en el `message`. Cuando una instancia específica de una matriz tipada se pasa a `taintObjectReference` como `object`, cualquier otra copia de la matriz tipada no será contaminada.
6060

61-
#### Returns {/*returns*/}
61+
#### Devuelve {/*returns*/}
6262

63-
`experimental_taintObjectReference` returns `undefined`.
63+
`experimental_taintObjectReference` devuelve `undefined`.
6464

6565
#### Caveats {/*caveats*/}
6666

67-
- Recreating or cloning a tainted object creates a new untainted object which may contain sensitive data. For example, if you have a tainted `user` object, `const userInfo = {name: user.name, ssn: user.ssn}` or `{...user}` will create new objects which are not tainted. `taintObjectReference` only protects against simple mistakes when the object is passed through to a Client Component unchanged.
67+
- Recrear o clonar un objeto contaminado crea un nuevo objeto no contaminado que puede contener datos sensibles. Por ejemplo, si tienes un objeto `user` contaminado, `const userInfo = {name: user.name, ssn: user.ssn}` o `{...user}` creará nuevos objetos que no estarán contamidos. `taintObjectReference` solo protege contra errores simples cuando el objeto se pasa sin cambios a un Componente Cliente.
6868

6969
<Pitfall>
7070

71-
**Do not rely on just tainting for security.** Tainting an object doesn't prevent leaking of every possible derived value. For example, the clone of a tainted object will create a new untainted object. Using data from a tainted object (e.g. `{secret: taintedObj.secret}`) will create a new value or object that is not tainted. Tainting is a layer of protection; a secure app will have multiple layers of protection, well designed APIs, and isolation patterns.
71+
**No confíes únicamente en la 'contaminación' para la seguridad.** Contaminar un objeto no evita la filtración de todos los valores derivados posibles. Por ejemplo, el clon de un objeto contaminado creará un nuevo objeto no contaminado. Usar datos de un objeto contaminado (e.j. `{secret: taintedObj.secret}`) creará un nuevo valor u objeto que no esté contaminado. La contaminación es una capa de protección; una aplicación segura tendrá múltiples capas de protección, APIs bien diseñadas y patrones de aislamiento.
7272

7373
</Pitfall>
7474

7575
---
7676

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

79-
### Prevent user data from unintentionally reaching the client {/*prevent-user-data-from-unintentionally-reaching-the-client*/}
79+
### Evita que los datos de usuario lleguen al cliente de manera no intencionada {/*prevent-user-data-from-unintentionally-reaching-the-client*/}
8080

81-
A Client Component should never accept objects that carry sensitive data. Ideally, the data fetching functions should not expose data that the current user should not have access to. Sometimes mistakes happen during refactoring. To protect against these mistakes happening down the line we can "taint" the user object in our data API.
81+
Un Componente Cliente nunca debería aceptar objetos que contengan datos sensibles. Idealmente, las funciones de obtención de datos no deberían exponer datos a los que el usuario actual no debería tener acceso. A veces, ocurren errores durante la refactorización. Para protegernos contra estos errores en el futuro, podemos 'contaminar' el objeto de usuario en nuestra API de datos.
8282

8383
```js
8484
import {experimental_taintObjectReference} from 'react';
@@ -94,13 +94,13 @@ export async function getUser(id) {
9494
}
9595
```
9696

97-
Now whenever anyone tries to pass this object to a Client Component, an error will be thrown with the passed in error message instead.
97+
Ahora, cada vez que alguien intente pasar este objeto a un Componente Cliente, se lanzará un error con el mensaje de error proporcionado.
9898

9999
<DeepDive>
100100

101-
#### Protecting against leaks in data fetching {/*protecting-against-leaks-in-data-fetching*/}
101+
#### Protegiendo contra fugas en la obtención de datos. {/*protecting-against-leaks-in-data-fetching*/}
102102

103-
If you're running a Server Components environment that has access to sensitive data, you have to be careful not to pass objects straight through:
103+
Si estás ejecutando un entorno de Componentes de Servidor que tiene acceso a datos sensibles, debes tener cuidado de no pasar objetos directamente:
104104

105105
```js
106106
// api.js
@@ -130,7 +130,7 @@ export async function InfoCard({ user }) {
130130
}
131131
```
132132

133-
Ideally, the `getUser` should not expose data that the current user should not have access to. To prevent passing the `user` object to a Client Component down the line we can "taint" the user object:
133+
Idealmente, la función `getUser` no debería exponer datos a los que el `user` actual no debería tener acceso. Para evitar pasar el objeto de usuario a un Componente Cliente más adelante, podemos "contaminar" el objeto de usuario:
134134

135135

136136
```js
@@ -148,6 +148,6 @@ export async function getUser(id) {
148148
}
149149
```
150150

151-
Now if anyone tries to pass the `user` object to a Client Component, an error will be thrown with the passed in error message.
151+
Ahora, si alguien intenta pasar el objeto de `user` a un Componente Cliente, se lanzará un error con el mensaje de error proporcionado.
152152

153153
</DeepDive>

0 commit comments

Comments
 (0)