【问题标题】:Redux Toolkit doesn't work well with WebStormRedux Toolkit 不适用于 WebStorm
【发布时间】:2021-08-15 03:22:45
【问题描述】:

我正在学习 Redux 和 Redux Toolkit,但我不明白为什么在我尝试调度操作时自动完成不起作用(见下图)。

我导入了“动作”,但 WebStorm 看不到任何方法。

在 VSCode 上效果很好。

这里是行动:

import {createSlice} from "@reduxjs/toolkit";

const initialCounterState = { counter: 0, showCounter: true };

const counterSlice = createSlice({
    name: "counter",
    initialState: initialCounterState,
    reducers: {
        increment(state) {
            state.counter++;
        },
        decrement(state) {
            state.counter--;
        },
        increase(state, action) {
            state.counter += action.payload;
        },
        toggleCounter(state) {
            state.showCounter = !state.showCounter;
        },
    },
});

export const counterActions = counterSlice.actions;
export default counterSlice.reducer

如上图,第一张图片是 WebStorm,第二张是 vscode。

Vscode 检测到所有方法,WebStorm 没有,我在 google 上没有发现类似的问题..

我想知道在 WebStorm 上看不到这些方法是不是很正常,这很奇怪,WebStorm 通常很强大..

【问题讨论】:

  • 动作定义是什么样的?
  • 马克西米利安·施瓦茨米勒 ftw!很奇怪,我实际上有同样的问题。但是,自动完成与我一起工作以增加,此后停止工作。我的方法配色方案也不正确。
  • 我切换到了 vscode ,我在 webstorm 上发现了很多这样的小问题,vscode 至少对于 react 开发更好,只是我的意见。
  • 在我的情况下也发生了同样的情况,也使用了 WebStorm,......并与 Udemy 的 Maximilian Schwarzmüller 一起参加了相同的培训课程。自动完成功能不适用于动作生成器方法。
  • @ReinierGarcia 它甚至在我的 VS Code 中也不起作用。有什么建议吗?

标签: javascript reactjs redux autocomplete webstorm


【解决方案1】:

这是一个已知问题,但范围更广:
不幸的是,WebStorm 不能很好地与 TypeScript 配合使用,并且其他编辑器只是使用库的 TypeScript 类型(即使在 JavaScript 场景中)来自动完成和错误消息,WebStorm 只是随机猜测错误的东西,因为它们的名称有点相似。

特别是对于 Redux Toolkit,他们的错误跟踪器中存在多个打开的问题,他们在忽略这些方面做得很好:例如 https://youtrack.jetbrains.com/issue/WEB-46527https://youtrack.jetbrains.com/issue/WEB-42559

所以,是的,由于 WebStorm 中的错误,在我上面链接的错误得到修复之前,“在 WebStorm 上看不到这些方法是正常的”。

在这一点上,我只能建议不要将 WebStorm 用于任何涉及 JavaScript 或 TypeScript 的软件开发。
Visual Studio Code 可能需要精心挑选和安装一些扩展才能与 WebStorm 实现功能对等,但它是免费的并且运行良好,所以我推荐的再多也不过分。

【讨论】:

  • 1) 在第一段中,您谈到了使用 TypeScript 的 Webstorm。但是,Yannick 显示的相关代码段不在 TypeScript 中。因此第一段是题外话。 2) 我已经将 Webstorm 与 TypeScript 一起使用,并且效果很好。 3) Webstorm 是一个专业的 IDE,具有更多开箱即用的功能,而不是像 VS Code 这样不完整的免费工具。在这种情况下缺乏自动完成只是由于缺乏组织。没什么大不了的。 4) Webstorm 在某些情况下也是免费的,只要用户拥有来自教育中心的有效电子邮件。
  • 这也不是 Yannick 提出的问题的一部分,这又使它成为话题,...... 跑题了。这不是他所要求的解决方案。他没有问任何关于 TypeScript 的问题。因此,从技术上讲,在这种特殊情况下,您关于 TypeScript 的整篇论文都是题外话。他问的东西很具体,很清楚,很简洁,很简单。他就是这么问的。干杯。
【解决方案2】:

我刚刚找到了解决方案,尝试了不同的方法或重新排列了我的文件。我正在与 Udemy 的同一位教授学习相同的教程。只是一个问题或以特定方式组织您的文件和导入/导出。

不是直接从其各自的切片文件导出每个 SliceAction,而是必须将它们中的每一个都集中在存储索引文件上并从那里导出。

解决方案:代码示例:

文件:src/store/counterSlice.js

import {createSlice} from '@reduxjs/toolkit';

const counterInitialState = {
    counter: 0,
    showCounter: true,
};

const counterSlice = createSlice({
    name: 'counterSlice',
    initialState: counterInitialState,
    reducers: {
        incrementCounter(state) {
            state.counter++;
        },
        decrementCounter(state) {
            state.counter--;
        },
        increaseByCounter(state, action) {
            state.counter = state.counter + action.payload.amount;
        },
        decreaseByCounter(state, action) {
            state.counter = state.counter - action.payload.amount;
        },
        toggleCounter(state) {
            state.showCounter = !state.showCounter;
        },
    }
});

export default counterSlice;

文件:src/store/authSlice.js

import {createSlice} from '@reduxjs/toolkit';

const authInitialState = {
    isAuthenticated: false,
};

const authSlice = createSlice({
    name: 'authSlice',
    initialState: authInitialState,
    reducers: {
        logIn(state) {
            state.isAuthenticated = true;
        },
        logOut(state) {
            state.isAuthenticated = false;
        },
        toggleLogging(state) {
            state.isAuthenticated = !state.isAuthenticated;
        },
    }
});

export default authSlice;

文件:src/store/index.js

import {configureStore} from '@reduxjs/toolkit';
import counterSlice from "./counterSlice";
import authSlice from "./authSlice";

const store = configureStore({
    reducer: {
        counterSliceReducer: counterSlice.reducer,
        authSliceReducer: authSlice.reducer,
    },
});

export const counterSliceActions = counterSlice.actions;
export const authSliceActions = authSlice.actions;

export default store;

以这种方式组织文件后,您将看到现在您可以完美地查看导入的 CaseReducerActions 对象(如 authSliceActionscounterSliceActions 中的动作创建器方法,例如)。

这就是我的 WebStorm IDE 现在的样子:

文件:src/App.js

文件:src/components/Counter/Counter.jsx

如您所见,现在我使用 WebStorm 自动完成(自动完成功能)。

【讨论】:

  • 感谢您的解决方案。这个对我来说效果很好。也许@Yannick 可以将此标记为已接受的解决方案?
  • 它在我的 VS Code 上也不起作用。有什么建议吗?
猜你喜欢
  • 2022-01-26
  • 1970-01-01
  • 2014-05-30
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2022-09-25
相关资源
最近更新 更多