- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过运行 npm update
在本地更新了一些包后,我在启动我的 React 项目时开始收到此错误。
ReferenceError: Cannot access 'USER_LOGIN_PENDING' before initialization
Module.USER_LOGIN_PENDING
http://localhost:3300/static/js/main.chunk.js:28487:110
push../src/state/reducers/auth.js.__webpack_exports__.default
src/state/reducers/auth.js:23
20 |
21 | export default (state = INITIAL_STATE, action) => {
22 | switch (action.type) {
> 23 | case USER_LOGIN_PENDING:
24 | return { ...state, isLoading: true, showLoginError: false };
25 | case USER_LOGIN_SUCCESS:
26 | return {
还有更多堆栈帧,但这是最上面的一个。
在删除 node_modules 和 package-lock.json 后,我尝试恢复本地包并运行 npm install
。运行没有错误。不知道为什么它突然开始给我这个错误。我的一个 friend 把 master 拉下来了,它在相同的版本上工作得很好。
这里是可能引发错误的 reducers 文件:
import {
USER_LOGIN_PENDING,
USER_LOGIN_SUCCESS,
USER_LOGIN_FAIL,
NOT_LOGGED_IN,
USER_LOGOUT_PENDING,
USER_LOGOUT_SUCCESS
} from '../actions/auth';
export const INITIAL_STATE = {
isLoading: false,
isLoggedIn: false,
showLoginError: false,
loginError: null,
access_token: null,
refresh_token: null,
expires_at: null
};
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case USER_LOGIN_PENDING:
return { ...state, isLoading: true, showLoginError: false };
case USER_LOGIN_SUCCESS:
return {
...state,
isLoading: false,
showLoginError: false,
isLoggedIn: true,
access_token: action.data.access_token,
expires_at: action.data.expires_at,
refresh_token: action.data.refresh_token
};
case USER_LOGIN_FAIL:
return {
...state, isLoading: false, showLoginError: true, loginError: action.payload
};
case NOT_LOGGED_IN:
return { ...state, isLoading: false, isLoggedIn: false };
case USER_LOGOUT_PENDING:
return { ...state, isLoading: true };
case USER_LOGOUT_SUCCESS:
return {
...state,
isLoading: false,
isLoggedIn: false,
access_token: null,
expires_at: null,
refresh_token: null
};
default:
return state;
}
};
这里是 actions/auth 以防万一。
import userModel from '../../models/user';
export const USER_LOGIN_PENDING = "USER_LOGIN_PENDING";
export const USER_LOGIN_SUCCESS = "USER_LOGIN_SUCCESS";
export const USER_LOGIN_FAIL = "USER_LOGIN_FAIL";
export const NOT_LOGGED_IN = "NOT_LOGGED_IN";
export const USER_LOGOUT_PENDING = "USER_LOGOUT_PENDING";
export const USER_LOGOUT_SUCCESS = "USER_LOGOUT_SUCCESS";
export const checkLoggedIn = () => dispatch => {
dispatch({ type: USER_LOGIN_PENDING });
const access = JSON.parse(localStorage.getItem('access_token'));
const refresh = JSON.parse(localStorage.getItem('refresh_token'));
const exp = JSON.parse(localStorage.getItem('expires_at'));
if (access && refresh && exp) {
if (JSON.parse(exp) > new Date().getTime()) {
dispatch({ type: USER_LOGIN_SUCCESS, data: { access_token: access, refresh_token: refresh, expires_at: exp } });
return Promise.resolve(access);
}
dispatch({ type: NOT_LOGGED_IN });
return Promise.reject({ statusCode: 401 });
}
dispatch({ type: NOT_LOGGED_IN });
return Promise.reject({ statusCode: 401 });
};
export const login = body => async dispatch => {
const { email, password } = body;
try {
dispatch({ type: USER_LOGIN_PENDING });
const data = await userModel.login(email, password);
const {
access_token, refresh_token, expires_at, user
} = data;
localStorage.setItem('access_token', JSON.stringify(access_token));
localStorage.setItem('refresh_token', JSON.stringify(refresh_token));
localStorage.setItem('expires_at', JSON.stringify(expires_at));
dispatch({ type: USER_LOGIN_SUCCESS, data: { access_token, refresh_token, expires_at } });
return Promise.resolve(user);
} catch (err) {
dispatch({ type: USER_LOGIN_FAIL, payload: err });
return Promise.reject(err);
}
};
export const logout = () => dispatch => {
dispatch({ type: USER_LOGOUT_PENDING });
localStorage.removeItem('access_token');
localStorage.removeItem('refresh_token');
localStorage.removeItem('expires_at');
dispatch({ type: USER_LOGOUT_SUCCESS });
};
此外,我的 package.json 以防万一。
{
"name": "project",
"version": "0.1.0",
"private": true,
"engines": {
"node": "10.14.1"
},
"dependencies": {
"date-and-time": "^0.10.0",
"enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.14.0",
"jest-junit": "^10.0.0",
"lodash": "^4.17.15",
"node-sass": "^4.12.0",
"react": "^16.9.0",
"react-beautiful-dnd": "^11.0.5",
"react-datepicker": "^2.9.6",
"react-dom": "^16.9.0",
"react-dropzone": "^10.2.2",
"react-redux": "^7.1.1",
"react-router-dom": "^5.1.0",
"react-scripts": "^3.1.2",
"react-toastify": "^5.4.0",
"redux": "^4.0.4",
"redux-logger": "^3.0.6",
"redux-thunk": "^2.3.0",
"semantic-ui-react": "^0.88.1"
},
"devDependencies": {
"eslint": "^6.1.0",
"eslint-config-airbnb": "^18.0.1",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.14.3",
"eslint-plugin-react-hooks": "^1.7.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"jenkins-test": "CI=true react-scripts test --coverage --watchAll=false --coverageDirectory=coverage/cobertura --reporters=jest-junit --reporters=default",
"postbuild": "rm -rf ../build && mv build ../",
"lint": "eslint ./"
},
"jest": {
"coverageReporters": [
"text",
"cobertura"
]
},
"jest-junit": {
"outputDirectory": "./coverage",
"outputName": "report-jest.xml",
"suiteName": "Client jest tests",
"classNameTemplate": "Client jest tests.{classname}-{title}",
"titleTemplate": "Client jest tests.{classname}-{title}",
"ancestorSeparator": " > "
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
],
"proxy": "http://localhost:8082/"
}
帮助将不胜感激。
最佳答案
这个问题已经有 7 年历史了,但当我遇到同样的问题时,我还是会发布一个答案,即使它可能不再对你有帮助。
在我们的例子中,这个错误是由循环导入引起的(模块 A 导入模块 B,模块 B 导入模块 C,模块 C 导入模块 A)。这一直有效到某一点,但在升级依赖项后中断。
关于javascript - 收到错误 : `ReferenceError: Cannot access ' imported const' before initialization` in react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60961020/
我刚刚通过更改 import * as CodeMirror 修复了一个错误简单明了import CodeMirror . 我复制了this code . (从 TypeScript 移植) impo
我调试(在 PyCharm 中)一个脚本。我在断点处停止,然后转到调试控制台窗口,然后从那里调用导入行,如下所示: import my_util1 from my_utils 然后我调用 my_uti
谁能给我解释一下 import 语句是如何工作的? 例如,我在 myapp/app/models 包中有一个类型 User: package models type User struct {
我想导入 Control.App进入一个引用 PrimIO.PrimIO 的模块通过不合格的名称 PrimIO在很多地方。当然,问题在于 Control.App还导出一个名为 PrimIO 的定义.我
我应该使用 from foo import bar 或者 import foo.bar as bar 当导入模块 还有无需/希望更改名称 (bar)? 有什么不同吗?有关系吗? 最佳答案 假设 bar
我正在 Windows 上使用 Theano 进行深度学习实验的第一步,我很惊讶仅仅加载库需要多少时间。 这是小测试程序: from time import time t0 = time() impo
在 TypeScript 中,如何在不创建任何别名的情况下从文件“导入 *”? 例如我有一个包含顶级导出函数的文件“utils”,我想导入所有这些函数而不为每个函数重新创建别名。 像这样: impor
我应该使用 from foo import bar 或 import foo.bar as bar 当导入模块并且不需要/希望更改名称(bar)? 有什么不同吗?有关系吗? 最佳答案 假设bar是fo
这个问题在这里已经有了答案: Use 'import module' or 'from module import'? (23 个回答) 关闭8年前。 我想知道代码片段之间是否有任何区别 from u
我试过了 from urllib import request mine = request.Request() 和 import urllib.request mine = urllib.reque
所以,我有一个关于 Python 导入的小谜团。我确信出于某种原因事情应该是这样的,因为 Guido 很少出错。但是,为什么会这样呢? $ cat myModule.py #!/usr/bin/pyt
我们正在将 Rails 3.2 应用程序升级到 Rails 4.0。 我们有一个 assets/stylesheets/application/index.css.sass加载一些其他 sass 文件
我正在开发一个相当小的 Typescript 代码库,该代码库已经足够大,可以拆分到多个文件中。这是一个二十一点游戏。我目前有一堆代码,看起来像: var player = new Player();
是否可以以当模块为 use 时的方式编写模块? d 没有显式导入所有子例程都被导入,当它是 use d 显式导入只有这些显式导入的子程序可用? #!/usr/bin/env perl6 use v6;
这个问题在这里已经有了答案: how to watch changes in whole directory/folder containing many sass files (9 个回答) 5年前
我真的很难让它在 xcode 4 中工作。 我有一个项目将在许多应用程序(网络)中重用,因此我创建一个工作区并添加我的两个项目。到目前为止,一切都很好....这就是失败的地方.. #import "J
经典提取器和新提取器之间的主要区别是什么,哪个最好用? 最佳答案 经典提取器使用原始工作流程,与爬虫和连接器相同。 新的提取器更加精简,通常看起来和感觉都更好,并且经典提取器中的许多小错误已在新提取器
在处理 google webfont import mixin 时,我注意到无法动态构建 @import URL。 .gFontImport (@name, @weights, @subsets) {
我正在关注Django 1.8 tutorial 。在我的项目中mysite ,有一个源文件夹polls 。文件夹中有views.py模块其中 index函数已定义。还有一个urls.py文件: fr
我想使用名为 warp 的第三方库编译一个简单的 Rust 程序: [package] name = "hello-world-warp" version = "0.1.0" [dependencie
我是一名优秀的程序员,十分优秀!