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
Copy file name to clipboardExpand all lines: HOC.md
+50-50
Original file line number
Diff line number
Diff line change
@@ -29,7 +29,7 @@
29
29
**Este HOC Cheatsheet** agrupa todo el conocimiento disponible para escribir Componentes de Orden Superior (HOC por las siglas en inglés de higher-order component) con React y Typescript.
30
30
31
31
- Inicialmente haremos un mapa detallado de la [documentación oficial sobre HOC](https://reactjs.org/docs/higher-order-components.html).
32
-
- Si bien existen hooks, muchas librerias y bases de código aún necesitan escribir HOC
32
+
- Si bien existen hooks, muchas librerías y bases de código aún necesitan escribir HOC
33
33
- Render props podrian ser considerado en el futuro
34
34
- El objetivo es escribir HOC que ofrezcan un tipado seguro sin interferir
35
35
@@ -51,7 +51,7 @@
51
51
52
52
> Este es un ejemplo de un HOC para copiar y pegar. Si ciertos pedazos no tienen sentido para ti, ve a la [Sección 1](#section-1-react-hoc-docs-in-typescript) para obtener un tutorial detallado a través de una traducción completa de la documentación de React en Typescript.
53
53
54
-
A veces quieres una forma sencilla de pasar props desde otro lugar (ya sea el store global o un provider) y no quieres continuamente pasar los props hacia abajo. Context es excelente para eso, pero entonces los valores desde el context solo pueden ser usado desde tu función `render`. Un HOC proveerá esos valores como props.
54
+
A veces quieres una forma sencilla de pasar props desde otro lugar (ya sea el store global o un provider) y no quieres continuamente pasar los props hacia abajo. Context es excelente para eso, pero entonces los valores desde el context solo pueden ser usado desde tu función `render`. Un HOC proveerá esos valores cómo props.
55
55
56
56
**Los props inyectados**
57
57
@@ -76,7 +76,7 @@ class MyButton extends React.Component<Props> {
76
76
}
77
77
78
78
private someInternalMethod() {
79
-
// Los valores del tema tambien estan aqui disponibles como props.
79
+
// Los valores del tema también estan aquí disponibles cómo props.
@@ -125,10 +125,10 @@ Tenga en cuenta que la aserción `{...this.props as T}` es necesaria debido a un
125
125
Para obtener detalles de `Optionalize` consulte la [sección de tipos de utilidad](https://github.com/typescript-cheatsheets/typescript-utilities-cheatsheet#utility-types)
126
126
127
127
128
-
Aquí hay un ejemplo más avanzado de un Componente Dinámico de Orden Superior (HOC por las siglas en inglés de higher-order component) que basa algunos de sus parametros en los props del componente que está siendo pasado.
128
+
Aquí hay un ejemplo más avanzado de un Componente Dinámico de Orden Superior (HOC por las siglas en inglés de higher-order component) que basa algunos de sus parámetros en los props del componente que está siendo pasado.
129
129
130
130
```tsx
131
-
// Inyecta valores estaticos a un componente de tal manera que siempre son proporcionados.
131
+
// Inyecta valores estáticos a un componente de tal manera que siempre son proporcionados.
Para una reutilización "verdadera", tambien debes considerar exponer una referencia para tus HOC. Puedes utilizar `React.forwardRef<Ref, Props>`como está documentado en [el cheatsheet basico](https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/blob/master/README.md#forwardrefcreateref), pero estamos interesados en más ejemplos del mundo real. [Aquí hay un buen ejemplo en práctica](https://gist.github.com/OliverJAsh/d2f462b03b3e6c24f5588ca7915d010e) de @OliverJAsh.
143
+
Para una reutilización "verdadera", también debes considerar exponer una referencia para tus HOC. Puedes utilizar `React.forwardRef<Ref, Props>`cómo está documentado en [el cheatsheet basico](https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/blob/master/README.md#forwardrefcreateref), pero estamos interesados en más ejemplos del mundo real. [Aquí hay un buen ejemplo en práctica](https://gist.github.com/OliverJAsh/d2f462b03b3e6c24f5588ca7915d010e) de @OliverJAsh.
144
144
145
145
146
-
# Seccion 1: Documentacion de React sobre HOC en TypeScript
146
+
# Sección 1: Documentación de React sobre HOC en TypeScript
147
147
148
-
En esta primera seccion nos referimos de cerca a [la documentacion de React sobre HOC](https://reactjs.org/docs/higher-order-components.html) y ofrecemos un paralelo directo en TypeScript.
148
+
En esta primera sección nos referimos de cerca a [la documentación de React sobre HOC](https://reactjs.org/docs/higher-order-components.html) y ofrecemos un paralelo directo en TypeScript.
149
149
150
150
#
151
151
152
-
## Ejemplo de la documentacion: [Usa HOCs para preocupaciones transversales](https://reactjs.org/docs/higher-order-components.html#use-hocs-for-cross-cutting-concerns)
152
+
## Ejemplo de la documentación: [Usa HOCs para preocupaciones transversales](https://reactjs.org/docs/higher-order-components.html#use-hocs-for-cross-cutting-concerns)
## Docs Example: [Don’t Mutate the Original Component. Use Composition.](https://reactjs.org/docs/higher-order-components.html#dont-mutate-the-original-component-use-composition)
298
+
## Ejemplo de documentación: [No mutes el componente original. Usa composición.](https://es.reactjs.org/docs/higher-order-components.html#no-mutes-el-componente-original-usa-composici%C3%B3n)
299
299
300
-
This is pretty straightforward - make sure to assert the passed props as `T`[due to the TS 3.2 bug](https://github.com/Microsoft/TypeScript/issues/28938#issuecomment-450636046).
300
+
Es bastante sencillo - asegurate de comprobar los props recibidos cómo `T`[debido al error TS 3.2](https://github.com/Microsoft/TypeScript/issues/28938#issuecomment-450636046).
301
301
302
302
```tsx
303
303
function logProps<T>(WrappedComponent:React.ComponentType<T>) {
@@ -309,22 +309,22 @@ function logProps<T>(WrappedComponent: React.ComponentType<T>) {
309
309
console.log("Next props: ", nextProps);
310
310
}
311
311
render() {
312
-
//Wraps the input component in a container, without mutating it. Good!
312
+
//Envuelve el componente de entrada en un contenedor sin mutarlo. Muy bien!
313
313
return <WrappedComponent{...(this.propsasT)} />;
314
314
}
315
315
};
316
316
}
317
317
```
318
-
## Ejemplo de documentacion: [Pasa los props no relacionados al componente envuelto][Pass Unrelated Props Through to the Wrapped Component](https://es.reactjs.org/docs/higher-order-components.html#convention-pass-unrelated-props-through-to-the-wrapped-component)
318
+
## Ejemplo de documentación: [Pasa los props no relacionados al componente envuelto](https://es.reactjs.org/docs/higher-order-components.html#convention-pass-unrelated-props-through-to-the-wrapped-component)
319
319
320
-
No se necesitan consejos especificos de Typescript aqui.
320
+
No se necesitan consejos específicos de Typescript aquí.
321
321
322
-
## Ejemplo de documentacion: [Maximizar la componibilidad](https://es.reactjs.org/docs/higher-order-components.html#convention-maximizing-composability)
322
+
## Ejemplo de documentación: [Maximizar la componibilidad](https://es.reactjs.org/docs/higher-order-components.html#convention-maximizing-composability)
323
323
324
-
los HOC pueden tomar la forma de functiones que retornan Componentes de Orden Superior que devuelven Componentes
324
+
los HOC pueden tomar la forma de funciones que retornan Componentes de Orden Superior que devuelven Componentes
325
325
326
326
327
-
la funcion`connect` de `react-redux` tiene una serie de sobrecargas del que puedes obtener inspiracion[]
327
+
la función`connect` de `react-redux` tiene una serie de sobrecargas del que puedes obtener inspiración[]
328
328
`connect` from `react-redux` has a number of overloads you can take inspiration [fuente](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/bc0c933415466b34d2de5790f7cd6418f676801e/types/react-redux/v5/index.d.ts#L77).
329
329
330
330
Construiremos nuestro propio `connect` para entender los HOC:
// this props viene despues de tal modo que anula los predeterminados
397
+
// this props viene después de tal modo que anula los predeterminados
398
398
return (
399
399
<WrappedComponent
400
400
{...this.props}
@@ -411,7 +411,7 @@ function connect(mapStateToProps: Function, mapDispatchToProps: Function) {
411
411
[Ver en el TypeScript Playground](https://www.typescriptlang.org/play/?jsx=2#code/JYWwDg9gTgLgBAJQKYEMDG8BmUIjgcilQ3wFgAoCtCAOwGd5qQQkaY64BeOAbQF0A3BSq0GcAMK4WbADLAx3ABQBKLgD44iinDgAeACbAAbnAD0aisuHlq9RlNYwAykgA2SDNC6aA+gC44FBoATwAaOAgAdxoABRwwOgCg4NVODUUAb204YH0AqNj4ugA6XIoAX2UhG1F7ZkcAQQxgUW8VdU0s8h0UfX1JerYAxQYoANHgGgBzVI0maXZisABXOgALTLgYJAAPGHGYKHDcgPnHEvdpmDW4Soqq61sxSRoaD23+hzZvWzeMLW6cDObBc7k8R2ywJgTRgLXolkUAwWcgYD0o5FMpi2ayQdCQgSI2PxYCKWwgcAARvjJgArd5IfSU4JEuAACQA8uIKJNtlBMOh8QB1YDXJzLCl0NBQYBgWG0OIQBK6AAqGi6On0KBgKACyuq5QomGWNGatCBtD+MEUIBQYCc2u2yogCoSAQAYsbTTRwjawAAReRgLVoNZOl2JOAek1ymiqdVwIgwZZQGhwI3RuEq8IxOC7bY0fQcYWi8WS6WyuHhlVqcLiNQAnQ6QVQW1gBkDSBvIaIYgwYod2iOZXBNvV7Jx7I6GAj-Hh7wAKScAA1inIKS2oMEALJBFBTBkNGCHYAU5bbOi6cThdkgEW6GLhABEmu1j7UamqjbMWPERC1kymFlJjeKBzXAQc2GKOBlRxIEUFcNBllcLUGTgOdpzbOAcUJeQWUibD8WufEbSmYA0Cw1tWBKScEyQJMUyBZC6A4AcuxgYtQxxFhcz2VhCx7dA+1Yxx7yKNUaJ0FYKVcMjaILJAoHaeMvx0TFIzokMWRJRUOGCCBljgSIgngWl3igmDcOoJDGSpOB9EHQyRRuWxtj2HI7FQfRigkxsnngX0230e0ULnbhfWCx1nSKRRrnkYoGBQ8JYpKbSEjRFTfNqOAAoZAM6CDGAQ1C7LbTygqQzDaLkvih0kCStY4tSuh0oy79sUa0kmFxQJMF5IyoH4uhySIuDUwgIwFOlfRCNg6b+SQ+BB2owEMsTZNUwbVqdF0ZtKM+cC2J8jKMmKU7qqag0Vq2uATtOnKgtq8NLuuxtbuKe6yuDNYnqOxtzF+lqv2extyk-W59SAA)
412
412
413
413
414
-
## Ejemplo de documentacion: [Envuelve el nombre a mostrar para una depuración fácil](https://es.reactjs.org/docs/higher-order-components.html#convention-wrap-the-display-name-for-easy-debugging)
414
+
## Ejemplo de documentación: [Envuelve el nombre a mostrar para una depuración fácil](https://es.reactjs.org/docs/higher-order-components.html#convention-wrap-the-display-name-for-easy-debugging)
415
415
416
416
Este es bastante sencillo
417
417
@@ -437,16 +437,16 @@ function getDisplayName<T>(WrappedComponent: React.ComponentType<T>) {
437
437
}
438
438
```
439
439
440
-
## No escrito: [seccion de consideraciones](https://es.reactjs.org/docs/higher-order-components.html#consideraciones)
440
+
## No escrito: [sección de consideraciones](https://es.reactjs.org/docs/higher-order-components.html#consideraciones)
441
441
442
-
- No utilice HOCs dentro del metodo render
443
-
- Los metodos estaticos deben ser copiados
442
+
- No utilice HOCs dentro del método render
443
+
- Los métodos estáticos deben ser copiados
444
444
- Las Refs no son pasadas
445
445
446
446
447
-
# Seccion 2: Excluyendo Props
447
+
# sección 2: Excluyendo Props
448
448
449
-
Esto es cubierto en la seccion 1 pero aqui nos centraremos en el ya que es un problema muy comun. Los HOC a menudo inyectan props a componentes pre-fabricados. El problema que queremos resolver es que el component envuelto en HOC exponga un tipo que refleje el area de superficie reducida de los props - sin tener que volver a escribir manualmente el HOC cada vez. Esto implica algunos genericos, afortunadamente con algunas utilidades auxiliares.
449
+
Esto es cubierto en la sección 1 pero aquí nos centraremos en el ya que es un problema muy común. Los HOC a menudo inyectan props a componentes pre-fabricados. El problema que queremos resolver es que el componente envuelto en HOC exponga un tipo que refleje el área de superficie reducida de los props - sin tener que volver a escribir manualmente el HOC cada vez. Esto implica algunos genericos, afortunadamente con algunas utilidades auxiliares.
450
450
451
451
452
452
Digamos que tenemos un componente
@@ -468,7 +468,7 @@ And we have a `withOwner` HOC that injects the `owner`:
468
468
const OwnedDog =withOwner("swyx")(Dog);
469
469
```
470
470
471
-
Queremos escribir `withOwner` de tal modo que pase por los tipos de cualquier component como`Dog`, en el tipo de `OwnedDog`, menos la propiedad `owner` que inyecta:
471
+
Queremos escribir `withOwner` de tal modo que pase por los tipos de cualquier componente cómo`Dog`, en el tipo de `OwnedDog`, menos la propiedad `owner` que inyecta:
472
472
473
473
```tsx
474
474
typeofOwnedDog; // queremos que sea igual a { name: string }
2. Nosotros `Exclude` las propiedades que queremos encamascarar: `Exclude<keyof T, 'owner'>`, esto te deje con una lista de nombre de propiedades que quieres en el componente envuelto ejm: `name`
506
-
3. (Opcional) Utilice los tipo de interseccion si tiene mas para excluir: `Exclude<keyof T, 'owner' | 'otherprop' | 'moreprop'>`
507
-
4. Los nombres de las propiedades no son exactamente iguales a las propiedades en si, los cuales tambien tienen un tipo asociado. Asi que utilizamos esta lista generada de nombre para elegir `Pick` de los props originales: `Pick<keyof T, Exclude<keyof T, 'owner'>>`, this leaves you with the new, filtered props, e.g. `{ name: string }`
506
+
3. (Opcional) Utilice los tipo de intersección sí tiene mas para excluir: `Exclude<keyof T, 'owner' | 'otherprop' | 'moreprop'>`
507
+
4. Los nombres de las propiedades no son exactamente iguales a las propiedades en sí, los cuales también tienen un tipo asociado. Así que utilizamos esta lista generada de nombre para elegir `Pick` de los props originales: `Pick<keyof T, Exclude<keyof T, 'owner'>>`, this leaves you with the new, filtered props, e.g. `{ name: string }`
508
508
5. (opcional) En lugar de escribir esto manualmente cada vez, podemos utilizar esta utilidad: `type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>`
509
-
6. Ahora escribimos el HOC como un funcion generica:
509
+
6. Ahora escribimos el HOC cómo un función genérica:
510
510
511
511
```tsx
512
512
function withOwner(owner:string) {
@@ -520,11 +520,11 @@ function withOwner(owner: string) {
520
520
}
521
521
```
522
522
523
-
_Nota: el de arriba es un ejemplo incompleto y no funcional. PR una solucion!_
523
+
_Nota: el de arriba es un ejemplo incompleto y no funcional. PR una solución!_
524
524
525
525
## Aprende más
526
526
527
-
Tendremos que extraer las lecciones de aqui en el futuro pero aqui estan:
527
+
Tendremos que extraer las lecciones de aquí en el futuro pero aquí estan:
0 commit comments