WebStorm 中的 Redux 工具包操作参数

问题描述 投票:0回答:5

我开始使用 redux 工具包,但是当我尝试使用参数分派操作时,我收到来自 IDE 的警告:

“参数类型 {...} 不可分配给参数类型 {payload: {...}}”

或“参数数量无效,预计为 2”

我猜它认为状态应该是第一个参数。

有什么办法可以纠正这个问题吗?

编辑: 我找到了针对此特定问题的临时解决方案。 基本上,我所做的是将这些操作从文件中移出。

如果之前我有:

// reducer.js
const state = createSlice({
  // ...
  reducers: {
    handleNumber(state, action){}
  }
})

export const { handleNumber } = state.actions
export default state.reduer

现在我有:

// reducer.js
export const state = createSlice({
  // ...
  reducers: {
    handleNumber(state, action){}
  }
})

export default state.reducer
// actions.js
import { state } from './reducer'

export const { handleNumber } = state.actions

正如评论中所说。如果这些名称位于同一文件中,Webstorm 似乎会进行模式匹配。但如果它们位于单独的文件中,则会查看打字稿定义。

但是它提出了另一个问题,现在当我按住 Ctrl 键并单击

actions.js
中的函数名称时,它不会转到该函数,而是导航到类型声明。

reactjs redux webstorm redux-toolkit
5个回答
4
投票

这里是 RTK 联合维护者。这看起来很奇怪,而且绝对应该有效。 我想更深入地研究这一点。您能否创建一个包含此问题的复制存储库并将其发布到我们的 github 问题跟踪器?


2
投票

我也遇到过类似的问题,我不确定是什么导致了问题,但我发现删除/重命名您的(隐藏)

.idea
文件夹很有用。之后重新启动 Webstorm,它应该会生成一个可以工作的新
.idea
文件夹。

所以问题似乎是 Webstorm IDEA 默认设置中的某些内容导致了此问题。如果您不确定是否要保留某些设置,请务必先重命名 .idea 文件夹。

希望这有效!


1
投票

例如,您可以使用不同的名称导出操作

const exmapleSlice = createSlice({
  name: 'exmapleSliceId',
  initialState: exmapleSliceInitialState,
  reducers: {
    _changeSomeField(state, action){
      state.someField = action.payload;
    }
  }
});

export const {
  _changeSomeField: changeSomeField,
} = exmapleSlice.actions;

0
投票

我遇到了同样的问题,但删除 .idea 并重新启动 ide 就可以了。


0
投票

我在安装 @reduxjs/toolkit 包并重新启动打字稿编译器时遇到了同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.