使用 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 )
返回的内容,它应该是一个带有payload
和type
的对象
也不应该是:dispatch(setConfig( server: 'something', map: 'something' ));
目前尚不清楚错误来自何处。这是 TypeScript 错误,还是 JS 运行时错误?需要有关完整错误消息的更多详细信息。
@alextrastero 我无法记录它,因为代码没有运行。另外,我是否分别发送ConfigReducerState
或server
和map
也没关系。 @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 显示为未定义