Este es un error común que se muestra cuando estropeamos la acción. Pero en este caso, intento enviar una acción con datos en su parámetro . La acción está recibiendo los datos, pero el reductor no puede recuperarlos. Estoy usando el gancho useDispatch en este caso. ¿Hay alguna otra forma de enviar datos que no conozca, o debería usar la función connect() porque useDispatch tiene algunos errores? Estoy usando el nodo v16.15.1 y npm v8.12.2
He acortado el código para una mejor comprensión.
Componente
const data = {...} dispatch(sendData(data)); // the dispatch function will call onClick of a buttonAcción
export const sendData(data) => { type:ADD_DATA, //ADD_DATA is a constant imported for using as type data }reductor
const dataReducer = (state = [], action) => { switch(action.type) { case ADD_DATA: return { ...state, action.data } default: return state; } } combinado con la función combineReducers()
tienda creada usando configureStore()
la aplicación está empaquetada en <Provider store={store}></Provider>
Otro componente
const data = useSelector(state=> state.dataReducer); console.log(data); En console.log , el estado vacío se muestra cuando se procesa el componente. Pero no se actualiza onClick y da el error no detectado Las acciones deben ser objetos simples
Atrapado con el problema durante mucho tiempo y necesita ayuda
Gracias...
Su creador de acciones sendData está equivocado:
export const sendData(data) => { type:ADD_DATA, //ADD_DATA is a constant imported for using as type data } Esto en realidad no está devolviendo nada. Debido a que tiene un => y un { , es un cuerpo de función, no un objeto. Entonces, esto es en realidad :
typedata en lugar de un objeto como {type, data}
Podría poner paréntesis alrededor de las llaves para convertirlo en un objeto devuelto implícitamente: => ({type, data}) .
Sin embargo, la mejor respuesta aquí es cambiar y usar nuestro paquete oficial Redux Toolkit para escribir su lógica Redux. Redux Toolkit es la forma correcta de usar Redux hoy , y la API createSlice de RTK generará automáticamente creadores de acciones para usted .