Así que acabo de iniciar un procesamiento en segundo plano. Me pregunté, ¿qué está disponible cuando se deshabilita JavaScript? Solo hay HTML y CSS. De acuerdo. ¿Cómo puedo convertir esta aplicación existente para que funcione sin JavaScript? No tengo idea. ¿Y cómo puedo hacerlo de una manera mantenible? Porque no quería tener dos bases de código separadas que necesitaran mantenerse.
Bueno, avanzamos rápidamente hasta 2020, y creo que un día me desperté y mi mente había unido algunas piezas. Me di cuenta de que uno de los principios de Redux, que es que solo debes poner valores serializables en el estado o en las acciones, se alinea muy bien con, o en realidad se alinea perfectamente con un cierto tipo de carga útil que también es serializable. Bueno, hablando de forms (formularios), la solución estaba allí todo el tiempo. En lugar de tener botones independientes, simplemente podría envolverlos en un formulario y evitar el envío predeterminado para que, si se habilita JavaScript, se evite el evento. Y si no se habilita, simplemente llega al servidor y podemos hacer que nuestro servidor envíe cualquier acción que queramos realizar.
Así que en lugar de tener solo un controlador de clic simple en un botón, en su lugar hacemos algo como esto. Lo envolvemos en un formulario y establecemos la acción como una cadena vacía para que cuando envíes este formulario, se envíe a la misma ruta en la que ya estamos, lo que significa una ruta de vista. Y asumimos que la única razón por la que alguien haría una solicitud POST a una ruta de vista es porque están enviando este tipo de formulario que envuelve una acción que quieren realizar. Y dentro de él, incrustamos el estado actual o el estado del cliente, el estado de la aplicación y también el tipo de acción que queremos que se envíe. Y reemplazaremos nuestro tipo de botón por un botón de envío. Y también puedes omitir el atributo de tipo aquí.
Luego, en nuestro app.js, si estás usando Next.js, tenemos este get initial props, y verificamos si esta es una solicitud POST, bueno, entonces queremos leer el cuerpo y el cuerpo se verá algo como esto. Tendrá un tipo de acción, por ejemplo, y el estado. Y pasamos eso a una función auxiliar. Ahora analizaremos la carga útil. Usando el callback que proporcionamos, getReduxStore, tomará el estado analizado en la carga útil y creará una nueva ReduxStore con eso. Y también enviará la acción en la carga útil a esa ReduxStore y devolverá la ReduxStore actualizada y el estado actualizado. Luego podemos asignar eso a nuestro estado precargado y volver a renderizar nuestra aplicación con ese estado.
Entonces, cuando se habilita JavaScript, el usuario hace clic en el botón, se evita el evento y se envía la acción. El estado se actualiza y la aplicación de React se vuelve a renderizar en el lado del cliente. Y es bastante similar cuando se deshabilita JavaScript, excepto que no podemos evitar el predeterminado. Entonces, la solicitud llegará al servidor y nuestro servidor analizará la carga útil y enviará la acción, obtendrá el estado actualizado y volverá a renderizar la aplicación de React en el lado del servidor. Y en ambos escenarios, el resultado final es exactamente el mismo. El estado con el que terminas es exactamente el mismo. Y también, el HTML es exactamente el mismo.
Comments