Skip to content

Commit 9a714a6

Browse files
authored
Merge pull request #4180 from jorgefreires/source
docs(es): sync part5b with English version
2 parents c17c8db + d522899 commit 9a714a6

File tree

1 file changed

+53
-150
lines changed

1 file changed

+53
-150
lines changed

src/content/5/es/part5b.md

Lines changed: 53 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -636,174 +636,77 @@ Muestra el botón para eliminar una publicación de blog solo si la publicación
636636

637637
<div class="content">
638638

639-
### PropTypes
640-
641-
El componente <i>Togglable</i> asume que se le da el texto para el botón a través del prop <i>buttonLabel</i>. Si nos olvidamos de definir este prop al componente:
642-
643-
```js
644-
<Togglable> buttonLabel forgotten... </Togglable>
645-
```
646-
647-
La aplicación funciona, pero el navegador muestra un botón sin texto.
648-
649-
Nos gustaría hacer cumplir que cuando se usa el componente <i>Togglable</i>, se debe dar un valor al prop de texto del botón.
650-
651-
Los props esperados y requeridos de un componente se pueden definir con el paquete [prop-types](https://github.com/facebook/prop-types). Instalemos el paquete:
652-
653-
```shell
654-
npm install prop-types
655-
```
656-
657-
Podemos definir el prop <i>buttonLabel</i> como un prop obligatorio o <i>required</i> de tipo string como se muestra a continuación:
658-
659-
```js
660-
import PropTypes from 'prop-types'
661-
662-
const Togglable = React.forwardRef((props, ref) => {
663-
// ..
664-
})
665-
666-
Togglable.propTypes = {
667-
buttonLabel: PropTypes.string.isRequired
668-
}
669-
```
670-
671-
La consola mostrará el siguiente mensaje de error si el prop se deja sin definir:
639+
### ESlint
672640

673-
![error en la consola, buttonLabel es undefined](../../images/5/15.png)
641+
En la parte 3 configuramos la herramienta de estilo de código [ESlint](/es/part3/validacion_y_es_lint#lint) para el backend. Utilicemos ESlint también en el frontend.
674642

675-
La aplicación todavía funciona y nada nos obliga a definir props a pesar de las definiciones de PropTypes. Eso sí, es extremadamente poco profesional dejar <i>cualquier</i> output de color rojo en la consola del navegador.
643+
Vite ha instalado ESlint en el proyecto de forma predeterminada, por lo que todo lo que nos queda por hacer es definir nuestra configuración deseada en el archivo <i>eslint.config.js</i>.
676644

677-
También definamos PropTypes para el componente <i>LoginForm</i>:
645+
Creemos un archivo <i>eslint.config.js</i> con el siguiente contenido:
678646

679647
```js
680-
import PropTypes from 'prop-types'
681-
682-
const LoginForm = ({
683-
handleSubmit,
684-
handleUsernameChange,
685-
handlePasswordChange,
686-
username,
687-
password
688-
}) => {
689-
// ...
648+
import js from '@eslint/js'
649+
import globals from 'globals'
650+
import reactHooks from 'eslint-plugin-react-hooks'
651+
import reactRefresh from 'eslint-plugin-react-refresh'
652+
653+
export default [
654+
{ ignores: ['dist'] },
655+
{
656+
files: ['**/*.{js,jsx}'],
657+
languageOptions: {
658+
ecmaVersion: 2020,
659+
globals: globals.browser,
660+
parserOptions: {
661+
ecmaVersion: 'latest',
662+
ecmaFeatures: { jsx: true },
663+
sourceType: 'module'
664+
}
665+
},
666+
plugins: {
667+
'react-hooks': reactHooks,
668+
'react-refresh': reactRefresh
669+
},
670+
rules: {
671+
...js.configs.recommended.rules,
672+
...reactHooks.configs.recommended.rules,
673+
'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
674+
'react-refresh/only-export-components': [
675+
'warn',
676+
{ allowConstantExport: true }
677+
// highlight-start
678+
],
679+
indent: ['error', 2],
680+
'linebreak-style': ['error', 'unix'],
681+
quotes: ['error', 'single'],
682+
semi: ['error', 'never'],
683+
eqeqeq: 'error',
684+
'no-trailing-spaces': 'error',
685+
'object-curly-spacing': ['error', 'always'],
686+
'arrow-spacing': ['error', { before: true, after: true }],
687+
'no-console': 'off'
688+
//highlight-end
689+
}
690690
}
691-
692-
LoginForm.propTypes = {
693-
handleSubmit: PropTypes.func.isRequired,
694-
handleUsernameChange: PropTypes.func.isRequired,
695-
handlePasswordChange: PropTypes.func.isRequired,
696-
username: PropTypes.string.isRequired,
697-
password: PropTypes.string.isRequired
698-
}
691+
]
699692
```
700693

701-
Si el tipo de un prop pasado es incorrecto, por ejemplo, si intentamos definir el prop <i>handleSubmit</i> como un string, esto resultará en la siguiente advertencia:
702-
703-
![error de consola, handleSubmit espera una función](../../images/5/16.png)
704-
705-
### ESlint
706-
707-
En la parte 3 configuramos la herramienta de estilo de código para el backend [ESlint](/es/part3/validacion_y_es_lint#lint). Utilicemos ESlint también en el frontend.
708-
709-
Vite ha instalado ESlint en el proyecto de forma predeterminada, por lo que todo lo que nos queda por hacer es definir nuestra configuración deseada en el archivo <i>.eslintrc.cjs</i>.
710-
711-
Creemos un archivo <i>.eslintrc.js</i> con el siguiente contenido:
694+
NOTA: Si estás utilizando Visual Studio Code junto con el plugin ESLint, es posible que debas agregar una configuración de espacio de trabajo adicional para que funcione. Si ves <i>Failed to load plugin react: Cannot find module 'eslint-plugin-react'</i>, necesitas una configuración adicional. Agregar la siguiente línea a settings.json puede ayudar:
712695

713696
```js
714-
module.exports = {
715-
root: true,
716-
env: {
717-
browser: true,
718-
es2020: true,
719-
},
720-
extends: [
721-
'eslint:recommended',
722-
'plugin:react/recommended',
723-
'plugin:react/jsx-runtime',
724-
'plugin:react-hooks/recommended',
725-
],
726-
ignorePatterns: ['dist', '.eslintrc.cjs'],
727-
parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
728-
settings: { react: { version: '18.2' } },
729-
plugins: ['react-refresh'],
730-
rules: {
731-
"indent": [
732-
"error",
733-
2
734-
],
735-
"linebreak-style": [
736-
"error",
737-
"unix"
738-
],
739-
"quotes": [
740-
"error",
741-
"single"
742-
],
743-
"semi": [
744-
"error",
745-
"never"
746-
],
747-
"eqeqeq": "error",
748-
"no-trailing-spaces": "error",
749-
"object-curly-spacing": [
750-
"error", "always"
751-
],
752-
"arrow-spacing": [
753-
"error", { "before": true, "after": true }
754-
],
755-
"no-console": 0,
756-
"react/react-in-jsx-scope": "off",
757-
"react/prop-types": 0,
758-
"no-unused-vars": 0
759-
},
760-
}
761-
```
762-
763-
NOTA: Si estás utilizando Visual Studio Code junto con el plugin ESLint, es posible que debas agregar una configuración de espacio de trabajo adicional para que funcione. Si ves ```Failed to load plugin react: Cannot find module 'eslint-plugin-react'```, necesitas una configuración adicional. Agregar la línea ```"eslint.workingDirectories": [{ "mode": "auto" }]``` a settings.json en el espacio de trabajo parece funcionar. Mira [esto](https://github.com/microsoft/vscode-eslint/issues/880#issuecomment-578052807) para obtener más información.
764-
765-
Vamos a crear un archivo [.eslintignore](https://eslint.org/docs/latest/use/configure/ignore#the-eslintignore-file) con el siguiente contenido en la raíz del repositorio
766-
767-
```bash
768-
node_modules
769-
dist
770-
.eslintrc.cjs
771-
vite.config.js
697+
"eslint.workingDirectories": [{ "mode": "auto" }]
772698
```
773699

774-
Ahora los directorios <em>dist</em> y <em>node_modules</em> se omitirán al realizar el linting.
700+
Consulta [esto](https://github.com/microsoft/vscode-eslint/issues/880#issuecomment-578052807) para obtener más información.
775701

776-
Como de costumbre, puedes realizar el linting desde la línea de comandos con el siguiente comando:
702+
Como de costumbre, puedes realizar el linting desde la línea de comandos con el siguiente comando
777703

778704
```bash
779705
npm run lint
780706
```
781707

782708
o usando el plugin de Eslint del editor.
783709

784-
El componente _Togglable_ está causando una advertencia desagradable <i>Component definition is missing display name</i>:
785-
786-
![vscode mostrando error en la definición del componente](../../images/5/25x.png)
787-
788-
Las react-devtools también muestran que el componente no tiene un nombre:
789-
790-
![react devtools mostrando forwardRef como anónimo](../../images/5/26ea.png)
791-
792-
Afortunadamente, esto es fácil de solucionar.
793-
794-
```js
795-
import { useState, useImperativeHandle } from 'react'
796-
import PropTypes from 'prop-types'
797-
798-
const Togglable = React.forwardRef((props, ref) => {
799-
// ...
800-
})
801-
802-
Togglable.displayName = 'Togglable' // highlight-line
803-
804-
export default Togglable
805-
```
806-
807710
Puedes encontrar el código para nuestra aplicación actual en su totalidad en la rama <i>part5-7</i> de [este repositorio de GitHub](https://github.com/fullstack-hy2020/part2-notes-frontend/tree/part5-7).
808711

809712
</div>
@@ -814,8 +717,8 @@ Puedes encontrar el código para nuestra aplicación actual en su totalidad en l
814717

815718
#### 5.12: Frontend de la Lista de Blogs, paso 12
816719

817-
Define PropTypes para uno de los componentes de tu aplicación y agrega ESlint al proyecto. Define la configuración según tu preferencia. Corrige todos los errores del linter.
720+
Agrega ESlint al proyecto. Define la configuración según tu preferencia. Corrige todos los errores del linter.
818721

819-
Vite ha instalado ESlint en el proyecto por defecto, así que todo lo que queda por hacer es definir tu configuración deseada en el archivo <i>.eslintrc.cjs</i>.
722+
Vite ha instalado ESlint en el proyecto por defecto, así que todo lo que queda por hacer es definir tu configuración deseada en el archivo <i>eslint.config.js</i>.
820723

821724
</div>

0 commit comments

Comments
 (0)