使用React Redux hooks获取store状态提示auth属性不存在如何解决?
问题排查与解决方案
1. 根reducer挂载键名不匹配
你在根reducer中注册auth reducer时使用的键名是authReducer,但调用useSelector时读取的是state.auth,二者键名不一致导致读不到对应状态。
修改根reducer代码,将挂载键名改为auth即可:
import { combineReducers } from "redux"; import authReducer from "./auth.reducer"; export default combineReducers({ auth: authReducer // 此处修改键名 });
如果是纯JS项目,改完这一步就能解决报错。
2. TypeScript项目额外类型声明
如果你的项目用了TypeScript,还需要补充全局类型声明避免类型检查报错:
首先在store文件中导出RootState类型:
// auth.store.js 改为ts后缀,添加以下代码 import rootReducer from "../Reducers"; export type RootState = ReturnType<typeof rootReducer>;
方案一:单次指定类型
每次调用useSelector时主动传入RootState类型:
const { user: currentUser } = useSelector((state: RootState) => state.auth);
方案二:全局覆盖默认类型
新建react-redux.d.ts类型声明文件,添加以下代码全局覆盖默认RootState类型,之后所有useSelector调用都不需要额外指定类型:
import { RootState } from "./auth.store"; declare module "react-redux" { interface DefaultRootState extends RootState {} }
内容的提问来源于stack exchange,提问作者AntonioSk
相关产品推荐
相关产品推荐

