使用 Redux Toolkit 的调度操作需要两个参数

Posted

技术标签:

【中文标题】使用 Redux Toolkit 的调度操作需要两个参数【英文标题】:Dispatch actions with Redux Toolkit requires two arguments 【发布时间】:2021-07-27 18:03:38 【问题描述】:

使用 Redux Toolkit,我试图在没有事件等上下文的情况下调度操作,所以我收到以下错误:

错误 TS2554:预期 2 个参数,但得到 1 个。未提供“操作”参数。

使用以下代码:

const App = () => 
  const dispatch = useDispatch();
  useEffect(() => 
    (async () => 
      const result = await fetchConfig();
      dispatch(setConfig( ConfigReducerState: result )); // ---> Error is here <---
    )();
  , [dispatch]);
;

减速器:

export const configSlice = createSlice(
  name: 'config',
  initialState,
  reducers: 
    setConfig(state, action) 
      const  server, map  = action.payload;
      state.server = server;
      state.map = map;
    ,
  ,
);

通常我给动作创建函数一个参数 - 表示有效负载的对象,不需要引用状态。但在这里我不能。我做错了什么?

【问题讨论】:

尝试控制台记录调用setConfig( ConfigReducerState: result )返回的内容,它应该是一个带有payloadtype的对象 也不应该是:dispatch(setConfig( server: 'something', map: 'something' )); 目前尚不清楚错误来自何处。这是 TypeScript 错误,还是 JS 运行时错误?需要有关完整错误消息的更多详细信息。 @alextrastero 我无法记录它,因为代码没有运行。另外,我是否分别发送ConfigReducerStateservermap 也没关系。 @markerikson 我说得更清楚了。 【参考方案1】:

我以前和每次都看到过这种情况,这是... IntelliJ/WebStorm 中的一个错误。

参见 https://youtrack.jetbrains.com/issue/WEB-46527 和 https://youtrack.jetbrains.com/issue/WEB-42559 - 本质上,WebStorm 有自己的“快速 TypeScript 插值,它不使用官方的 tsserver 进行类型检查,而是一些自煮的东西,它仅根据具有相似性的事物来猜测类型名字 - 并且经常出错。

如果我正确理解了他们的系统,您应该能够在按住 Ctrl 的同时将鼠标悬停在上面看到正确的类型。

最后,除了切换到不会随机猜测但实际上使用 TypeScript 来评估 TypeScript 类型的 IDE 之外,我真的无法告诉你如何解决这个问题。

【讨论】:

谢谢,但我正在使用 VS Code。

以上是关于使用 Redux Toolkit 的调度操作需要两个参数的主要内容,如果未能解决你的问题,请参考以下文章

Redux ToolKit:是不是可以在由 createAsyncThunk 创建的一个操作中调度来自同一切片的其他操作

Redux-Toolkit createAsyncThunk with Typescript

关于 redux-toolkit redux-saga 的一些问题

Redux-Toolkit createAsyncThunk Dispatch 显示为未定义

redux-toolkit 在来自另一个 thunk reducer 的同一切片中使用 actionCreater

Redux 工具包,缺少调度 thunk 类型