在reduceer中未触发redux-toolkit操作

Tecnogirl

我正在尝试使用@ reduxjs / Toolkit触发一个简单的操作,但是它不起作用。

我看到该动作已分派,但就像分片减速器没有在听它一样。

const say = createAction("ui/say", what => ({ payload: what }));

const uiSlice = createSlice({
  name: "ui",
  initialState: { said: "" },
  reducers: {
    [say.type]: (state, action) => {
      console.log("saying", action.payload); //<-- not showing, why?
      state.currentList = action.payload;
    }
  }
});

const store = configureStore({
  reducer: combineReducers({
    ui: uiSlice.reducer
  })
});

const Chat = () => {
  const dispatch = useDispatch();
  const [whatToSay, setWhatToSay] = useState("");
  const whatWasSaid = useSelector(state => state.ui.said);

  const onSubmit = e => {
    e.preventDefault();
    dispatch(say(whatToSay));
    setWhatToSay("");
  };

  return (
    <div>
      <form onSubmit={onSubmit}>
        <input type="text" onChange={e => setWhatToSay(e.target.value)} />
        <button>Say</button>
      </form>
      {whatWasSaid ? <p>You said: {whatWasSaid}</p> : <p>Say something</p>}
    </div>
  );
};

这是一个最小的复制示例:https : //codesandbox.io/s/redux-toolkit-0tzxs?file=/src/index.js

丹尼斯瓦什

我认为您不匹配createSliceAPI

从您的代码中,您尝试实现一个动作的侦听器,因此您可能想使用extraReducers

const uiSlice = createSlice({
  name: "ui",
  initialState: { said: "" },
  // Not reducers: {}
  extraReducers: {
    [say.type]: (state, action) => {
      console.log("saying", action.payload);
      state.currentList = action.payload;
    }
  }
});

注意APIreducers属性createSlice

reducers: Object<string, ReducerFunction | ReducerAndPrepareObject>

如果要在其中使用sayreducers应为:

const say = (state, payload) => {
  console.log("saying", payload);
  state.currentList = payload;
};


const uiSlice = createSlice({
  name: "ui",
  initialState: { said: "" },
  reducers: { say }
});

// Usage
dispatch(uiSlice.actions.say(whatToSay));

编辑redux-toolkit

@markerikson:带有createSlice,reducers字段用于定义reducer并生成将与这些reducer匹配的操作。extraReducers字段用于处理其他地方已经定义的操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WebStorm中的Redux-toolkit操作参数

来自分类Dev

Redux操作未触发

来自分类Dev

JPopupMenu操作未触发

来自分类Dev

未触发 UIBarButtonItem 的操作

来自分类Dev

使用触发它的操作中的值测试Redux Saga

来自分类Dev

Redux Toolkit中的getState()方法

来自分类Dev

ServiceStack-MVC操作中未触发验证

来自分类Dev

在MVC 5中未触发操作方法

来自分类Dev

减速器未在触发操作时更新状态,因此Redux存储/状态未更新

来自分类Dev

调用useEffect()时,未触发Redux操作(从数据库获取)

来自分类Dev

远程验证未触发操作

来自分类Dev

远程验证未触发操作

来自分类Dev

Redux中的异步操作

来自分类Dev

Primefaces commandButton异步操作未触发

来自分类Dev

拖放操作后未触发KeyDown事件

来自分类Dev

空闲计时器未触发操作

来自分类Dev

Redux Toolkit-重置状态

来自分类Dev

Redux Toolkit历史API推送

来自分类Dev

如何在Redux Toolkit reducer中替换整个状态?

来自分类Dev

打字稿中的redux-toolkit createAction()类型定义

来自分类Dev

操作按钮未显示在操作栏中

来自分类Dev

为什么要使用字符串而不是直接方法调用来触发Redux存储中的操作?

来自分类Dev

React / TypeScript / Redux / Thunk操作未调度,状态未更新

来自分类Dev

redux-thunk调度方法触发未定义的操作

来自分类Dev

带有 Redux 的 React JS 不会更新触发操作的状态

来自分类Dev

CRM 2013自定义操作插件未触发

来自分类Dev

ASP.NET MVC删除操作未触发

来自分类Dev

Controller.OnActionExecuting在首次访问操作后未触发

来自分类Dev

文件夹操作未触发外壳脚本