Y vamos a utilizar este conjunto de suministros para hacerlo. Tenemos nuestro contexto de React para usar un gancho de reductor de React, componentes de ruta de React Router y un gancho personalizado para unirlo todo.
Comenzaremos con nuestro contexto de React para recopilar toda la información que necesitamos compartir entre el asistente de alto nivel y los pasos individuales. En nuestro componente de asistente, vamos a iterar sobre los hijos para obtener aquellos que coincidan con nuestro componente de paso que construiremos, y buscar la propiedad de nombre y recopilar nuestra lista de nombres como nuestros pasos. Vamos a establecer el paso predeterminado como el primero en esa lista, y luego declarar nuestro reductor.
El reductor del asistente lo veremos a continuación, pero estableceremos el estado inicial como el paso actual, el primer paso en el flujo. Los valores iniciales ayudarán a sembrar cualquier dato inicial que estemos recopilando en el flujo, y también esa lista de pasos. El valor devuelto por el reductor del usuario se establecerá como el proveedor del contexto del asistente. Mostraremos todos los hijos pasados a través de nuestro componente de asistente, y luego redirigiremos inicialmente desde el índice de esta función al paso predeterminado. Por lo tanto, cualquier dirección o enlace a esta función no tiene que saber cuál es el primer paso.
Ahora nuestro reductor del asistente es bastante simple en comparación con otros reductores. Tenemos dos acciones que contienen la sincronización para actualizar nuestro paso actual, y luego actualizar los valores para, como sugiere el nombre, actualizar los valores que estamos recopilando a lo largo de la vida útil de nuestro asistente. Y aquí está el componente de paso al que nos referíamos antes. Tenemos nuestra propiedad de componente y nuestro nombre, y luego vamos a utilizar nuestro gancho de contexto del asistente, que declararemos a continuación, para propagar este estado como propiedades en nuestros componentes. Esto es similar a otras API que ReactRouter solía usar en el pasado, y vamos a asignar el nombre de nuestro paso como la ruta de nuestra ruta. Y veremos lo útil que puede ser tener el mapa de estado a propiedades en nuestro componente a continuación. En nuestro gancho de contexto del asistente, vamos a volver a utilizar ese contexto utilizando el gancho de contexto de React. Y como resultado de useReducer, obtendremos el estado del asistente y esa función de despacho para enviar acciones a nuestro reductor. Vamos a envolver estas acciones de despacho en nuestras propias funciones personalizadas solo para facilitar la llamada a ellas para cualquier cosa que consuma este gancho. Tenemos nuestra acción de sincronización, nuestra acción de actualización de valores, y luego tenemos algo llamado goToStep, que utilizará ambas para llamar a updateValues si las tenemos, y luego llamar a sync, y luego avanzar en el historial, o simplemente avanzar y navegar al siguiente paso o al paso anterior dependiendo de cómo se use. Y así, nuestro siguiente paso buscará asegurarse de que no estemos en el último paso de nuestro asistente, y luego llamará a goToStep si no lo estamos, en comparación con el paso anterior, que se asegurará de que no estemos en el primer paso y nos permitirá llamar a previous, si ese es el caso, y luego lo devolveremos todo como resultado de nuestro gancho.
Y aquí está esa API nuevamente, veamos cómo un paso individual puede componer esto. Como declaramos como parte de una de nuestras directivas, puede ser independiente del formulario. Así que tenemos goToNextStep, goToPreviousStep y wizard.state que provienen de ese gancho, el componente de paso en sí. Pero nuevamente, podríamos usar ese gancho si quisiéramos directamente. Esto limpia un poco el código repetitivo y evita tener que llamar siempre a ese gancho, y permite una inyección de dependencia en caso de que quieras probar esto individualmente más tarde. Entonces, nuestra función handleSubmit simplemente utiliza un formulario regular. Vamos a obtener todos los valores del formulario del formulario HTML utilizando el nuevo método de objeto de fecha del formulario, y luego llamar a goToNextStep con ese objeto para los valores. Incluso podemos usar valores existentes del estado del asistente para establecer el valor predeterminado en nuestra entrada, y luego acciones muy familiares, como nuestro botón de retroceso y enviar para retroceder o avanzar.
Comments