es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Confundido por UseReducer.

Hola a todos, me pregunto si alguien podría ayudarme a entender useReducer. Alguien me lo sugirió porque estoy usando un formulario con muchas entradas que me gustaría actualizar dinámicamente en otras áreas de la aplicación. Soy nuevo en React y estoy teniendo dificultades para hacer que funcione como quisiera. Aquí está con lo que he estado trabajando hasta ahora.

const Form = () => {
  const useReducerState = (initialState = {}) => {
    const reducer = (prev, next) => ({ ...prev, ...next });
    return useReducer(reducer, initialState);
  };

  const [state, setState] = useReducerState({
    input1: "",
    input2: "",
    input3: "",
    input4: "",
    input6: "",
    input7: "",
    input8: "",
    input9: "",
  });

  const handleChange = (e) => {
    let proToUpdate = e.target.name;
    let value = e.target.value;
    setState({ [proToUpdate]: value });
  }

  const {
    input1,
    input2,
    input3,
    input4,
    input5,
    input6,
    input7,
    input8,
    input9
  } = state;

  return (
    // formulario JSX con entradas que coinciden con el estado anterior
  )
} 

La guía que seguí parece haberlo formateado de manera diferente a cómo se hace en otras guías. Como realmente no entiendo lo que está sucediendo, no puedo restablecer el formulario a los valores predeterminados, lo cual parece ser el objetivo principal del useReducer. Supongo que intenté hacer trampa y simplemente copiar la tarea de otra persona 🙂

Tags:  ,

Answer

  1. Avatar for davy.ai

    Comprendiendo useReducer en ReactJS

    Si eres nuevo en ReactJS y tienes dificultades para entender cómo utilizar useReducer para actualizar dinámicamente entradas en un formulario, no estás solo. Aquí te presentamos un desglose del código que has publicado y algunos consejos para entender useReducer:

    El Código

    const Form = () => {
        const useReducerState = (initialState = {}) => {    
            const reducer = (prev, next) => ({ ...prev, ...next });
            return useReducer(reducer, initialState);
        };
    
        const [state, setState] = useReducerState({
            input1: "",
            input2: "",
            input3: "",
            input4: "",
            input6: "",
            input7: "",
            input8: "",
            input9: "",
        });
    
        const handleChange = (e) => {        
            let proToUpdate = e.target.name;
            let value = e.target.value;
            setState({ [proToUpdate]: value });    
        }
    
        const {
            input1,
            input2,
            input3,
            input4,
            input5, 
            input6,
            input7,
            input8,
            input9   
        } = state;
    
        return (jsx formulario con entradas que coinciden con el estado anterior);
    }
    

    Comprendiendo useReducer

    • useReducer es un hook que te permite gestionar el estado de manera más compleja que useState.
    • Es útil cuando tienes varias piezas de estado relacionadas que deseas actualizar juntas.
    • useReducer toma como argumentos una función reductora y un estado inicial.
    • La función reductora se llama cada vez que se llama a dispatch y toma como argumentos el estado actual y un objeto de acción.
    • La función reductora devuelve un nuevo objeto de estado basado en el objeto de acción.
    • useReducer devuelve un array que contiene el estado actual y una función de despacho.
    • La función de despacho se utiliza para actualizar el estado en función de una acción dada.

    Explicación del Código

    • useReducerState es un hook personalizado que inicializa el estado utilizando useReducer.
    • La función reducer utilizada en useReducer toma el estado anterior (previo) y el siguiente estado (siguiente) como argumentos y los fusiona en un nuevo objeto de estado.
    • El estado inicial pasado a useReducer es un objeto con todas las entradas que deseas actualizar dinámicamente.
    • La función handleChange se llama cada vez que cambia el valor de una entrada.
    • proToUpdate obtiene el atributo name de la entrada que ha cambiado.
    • value obtiene el nuevo valor de la entrada que ha cambiado.
    • setState se llama con un objeto que tiene la propiedad name tomada de proToUpdate y su valor tomado de value.
    • Esto actualiza el estado utilizando el hook useReducer.
    • Por último, se desestructura el estado para obtener los valores individuales de las entradas que se utilizan para renderizar el formulario.

    Consejos para Comprender useReducer

    • useReducer es similar al concepto de Redux si estás familiarizado con él.
    • El principal beneficio de utilizar useReducer es que te permite gestionar un estado complejo de manera más predecible.
    • La función reductora puede contener declaraciones switch que manejan diferentes acciones para cambiar el estado.
    • Puedes despachar acciones para actualizar el estado en cualquier parte de tu aplicación, no solo en el componente donde se define el estado.
    • Considera utilizar useReducer caso por caso. Si solo tienes algunas piezas de estado relacionadas, useState podría ser más sencillo.

    ¡Espero que esto te ayude!

Comments are closed.