Iniciar un proyecto React
Al momento de escribir esto, Vite es el build tool de referencia para React.
-
Crear con
npm create vite@latest nombre-del-proyecto
. Esto mostrará un prompt para opciones donde podemos escoger React con JS o TS, y luego creará un directorio con./nombre-del-proyecto
. -
Si estás en un monorepo cambia los nombres de los scripts en
package.json
para que no te vuelvas loco con el debugger de VSCode o la consola. Por ejemplo, el scriptdev
puede llamarsedevThisVeryApp
y así en el listado de VSCode lo podrás diferencial, y te ayudará en el autocompletado de la consola. -
El comando
npm run devThisVeryApp
debe añadírsele--host
como argumento en elpackage.json
, quedandovite --host
para exponer el servidor a otras máquinas, ya que el desarrollo suelo hacerlo por VPN + SSH.
Ejemplo de scrips en un package.json
"scripts": {
"devPart5FrontEnd": "vite --host",
"buildPart5FrontEnd": "vite build",
"lintPart5FrontEnd": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
"previewPart5FrontEnd": "vite preview"
},
Pasar datos entre componentes
No olvides que los props de React no son más que pares de clave/valor, y que se pasan por referencia, igual que cualquier no-primitivo de JS.
No necesitas usar forwardRef ni useImperativeHandle
Aunque la parte 5 de Full Stack Open te indica que para mutar el estado interno de un componente hijo tienes que usar, además de useRef
, forwardRef
y useImperativeHandle
, verás que convierte todo el código en algo demasiado bizarro, pero más importante no es necesario.
En mi repo de FSO tienes un ejemplo con App.jsx
, Togglable.jsx
y AddBlog.jsx
.
¿Cómo?
-
Crea un
useRef
en el componente padre. Así te evitas re-renders. -
Pásalo como prop al componente donde quieres definir el comportamiento. En este componente deberías tener una función que define este comportamiento. Simplemente asigna esta función tal que
props.nombreDelRef.current = { fnQueDefineComportamiento };
.Ahora que has hecho esto, esta función podrá ser accedida desde el componente padre.
-
Ahora, en el padre podrás acceder a esa función con
nombreDelRef.current.fnQueDefineComportamiento()
. Si lo puedes hacer desde el padre, puedes pasarla como prop a un componente hermano del primero.
¿Para qué?
En el repo enlazado el caso de uso es el siguiente: El componente que añade un blog a la lista debe ocultarse de la vista después de añadir un blog.
El problema es que el mostrado/ocultado se gestiona en un componente diferente, que envuelve al primero.