javascript - 使用 useReducers 调度功能发送多个操作?

标签 javascript reactjs react-hooks use-reducer

使用 useReducer 时是否可以使用调度功能发送多个操作? Hook react ?我尝试将一系列操作传递给它,但这会引发未处理的运行时异常。

明确地说,通常会有一个初始状态对象和一个 reducer,如下所示:

const initialState = { message1: null, message2: null }

const messageReducer = (state, action) => {
  switch(action.type) {
    case SET_MESSAGE1:
      return {...state, message1: action.payload.message1}
    case SET_MESSAGE2:
      return {...state, message2: action.payload.message2}
    default:
      throw new Error("Something went wrong!")
  }
}


然后可以像这样使用 useReducers 调度函数来处理 react 应用程序中的状态。
[state, dispatch] = useReducer(messageReducer, initialState)
...
dispatch({type: SET_MESSAGE1: payload: {message1: "setting message1"})
dispatch({type: SET_MESSAGE2: payload: {message2: "setting message2"})

我想做的是将这两个突变发送到一个数组中,这样我只需要调用一次调度,如下所示:
dispatch([
  {type: SET_MESSAGE1: payload: {message1: "setting message1"},
  {type: SET_MESSAGE2: payload: {message2: "setting message2"}
])

现在我写下来了,我意识到从技术上讲,我可以编写 reducer 来接受数组而不是字符串,然后映射到该数组。但这被认为是一种好习惯吗?

最佳答案

如果您只想使用 dispatch 一次:

您可以再添加一个开关盒 SET_MULTIPLE进入 reducer :

const messageReducer = (state, action) => {
  switch(action.type) {
    case SET_MESSAGE1:
      return {...state, message1: action.payload.message1}
    case SET_MESSAGE2:
      return {...state, message2: action.payload.message2}
    case SET_MULTIPLE:
      return {...state, ...action.payload } // <---- HERE
    default:
      throw new Error("Something went wrong!")
  }
}

并更改调度是这样的:
dispatch({type: SET_MULTIPLE , payload: {message1: "setting message1" , message2 : "setting message2"})

关于javascript - 使用 useReducers 调度功能发送多个操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61981775/

相关文章:

javascript - 按键无法记录所有按键

reactjs - 使用 React hooks 和 onScroll 或 onWheel 防止重新渲染

javascript - 如何按值(value)对产品进行排序?

javascript - 如何正确地将节点从 ref 传递到上下文?

javascript - 嵌套的 Angular 子菜单没有正确隐藏

javascript - 在 JavaScript 中按周和月对日期 "yyyy-mm-dd"的简单数组进行分组

javascript - 如何使用非对称加密在javascript中接收数据?

reactjs - 如何使用 gorilla/mux 在 GO 中将我的 bundle.js 文件与我的 html 一起交付

javascript - 如何将 var 添加到文本 javascript

javascript - React router 1.0.0-beta3 无法正常工作