Quiero despachar sin un componente. Hice este código:
const handleClient = () => (dispatch) => { try { dispatch({ type: "SET_CLIENT", user: { id: 1, name: "client", }, }); } catch (err) { console.log(err); } }; export default handleLogin;
Pero este código no funciona. Importo este archivo y lo uso en el evento onSubmit. Yo uso Redux Thunk. @Edit Mira este código del tutorial
export const fetchContacts = () => (dispatch) => { fetch("https://myapi.local/contacts) .then(res => res.json()) .then(json => dispatch(contactsFetched(json.results))); };
Hice algo similar y funciona, así que no entiendo que en este ejemplo no funcione. Probé otro método
import actions from "./actions"; import store from "../store"; const handleClient = () => { try{ store.dispatch(actions.setClient({id: 1, name: 'Hello'})); } catch(err){ console.log(err); } } export default handleClient;
pero tampoco funciona.
https://redux.js.org/api/store#dispachaction
Debe tener acceso a su instancia de la tienda redux, que creó en algún lugar de su base de código a través createStore()
. Entonces es solo store.dispatch(handleclient())
.
Tenga en cuenta que este suele ser un requisito poco frecuente y potencialmente un olor a código. ¿Por qué su procesador no se activa desde un componente de React?
Nunca debe usar store.dispatch
, por lo que su primer ejemplo es incorrecto. Su segundo ejemplo es mejor, pero el único lugar donde puede usar useDispatch
es dentro de un componente de función o un gancho personalizado, no puede usarlo dentro de una devolución de llamada como handleLogin
. Intente usar useDispatch
al comienzo de su componente React y luego pase la función dispatch como argumento a handleLogin
.