如何在 createSlice reducer 中使用 dispatch?

Posted

技术标签:

【中文标题】如何在 createSlice reducer 中使用 dispatch?【英文标题】:How to use dispatch in createSlice reducer? 【发布时间】:2020-09-02 03:54:18 【问题描述】:

例如,我有这个 slice,我想在 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 ) => 
      //
    
  
)

【问题讨论】:

【参考方案1】:

你不能,你在 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
    ,
  ,
);

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

【讨论】:

以上是关于如何在 createSlice reducer 中使用 dispatch?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 redux-toolkit 中的 createSlice 方法在不同的 reducer 函数中使用单个动作类型

如何重用 Redux Toolkit createSlice 函数中的 reducer 逻辑?

有没有办法在 createSlice 中访问全局状态?

对 redux 工具包的 createSlice 中的多个操作做出反应

如何在没有 createSlice 的情况下使用 createThunkAsync

Redux 工具包操作不知何故不同步