redux 如何在createSlice reducer中使用dispatch?

h79rfbju  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(151)

例如,我有这个切片,我想在setUser中使用dispatch。我该怎么做?

const contactsSlice = createSlice({
  name: 'contacts',
  initialState: initialState,
  reducers: {
    setUsers: (state, { payload }) => {
      // I want to use dispatch here
      dispatch()
    },
    toggleFavorite: (state, { payload }) => {
      //
    },
    toggleCheck: (state, { payload }) => {
      //
    }
  }
})
dphi5xsq

dphi5xsq1#

你不能,你实现了一个reducer,其中dispatch函数不可用。读什么reducers are
相反,在React代码中添加逻辑:

useEffect(() => {
  dispatch(contactsSlice.actions.setUser());
  dispatch(loginSlice.actions.logicAction());
}, []);

或者,在目标切片中添加额外的reducer。

const contactsSlice = createSlice({
  name: "contacts",
  initialState: initialState,
  reducers: {
    setUsers: (state, { payload }) => {
      // setUsers logic
    },
  },
});

const loginSlice = createSlice({
  name: "login",
  initialState: initialState,
  extraReducers: {
    "contacts/setUsers": (state, { payload }) => {
      // Same logic
    },
  },
});

或者编写一个中间件,如thunkAPI下可用的createAsyncThunkdispatchgetState函数。

k0pti3hp

k0pti3hp2#

你可以把你的店保存到橱窗里

window.store = store

之后,您可以在setTimeout函数中调用dispatch

setTimeout(() => {
    window.store.dispatch(...)
})

相关问题