reactjs - 当我尝试访问 redux 状态时,它返回 undefined
问题描述
我可以调度我的状态,但我在 redux 中访问它时遇到问题
import React, {useEffect} from 'react';
import AuthenticationPage from './AuthenticationPage';
import '../styles/App.css';
import SignOut from './SignOut';
import{TOGGLE_LOGIN} from "../redux/actionTypes"
import{connect} from 'react-redux'
function App(props) {
useEffect(()=>{
if(window.localStorage.getItem('IsUserLogged')==="true"){
props.toggleLogin();
}
console.log(props.isLogged); //console show undefined
},[])
return (
<div className="App">
{props.isLogged===true?
<SignOut/>:
<AuthenticationPage/>}
</div>
);
}
const mapStateToProps = state =>{
return{
isLogged: state.isLogged
}
}
const mapDispatchToProps = dispatch=>{
return{
toggleLogin: ()=>dispatch({type: TOGGLE_LOGIN})
}
}
export default connect(mapStateToProps, mapDispatchToProps)(App);
我也可以用 props.toggleLogin() 切换我的状态,
但是当我尝试使用 props.isLogged 获取我的状态值时,它返回未定义而不是真/假。
这是我的 redux 代码:
减速器/logIn.js
import{TOGGLE_LOGIN} from "../actionTypes"
const initialState={
isLogged: false,
}
const LogInReducer = (state=initialState, action)=>{
switch(action.type){
case TOGGLE_LOGIN:{
return Object.assign({}, state, {
isLogged: !state.isLogged
})
}
default:{
return state;
}
}
}
export default LogInReducer;
减速器/index.js
import{combineReducers} from "redux";
import LogInReducer from './logIn.js';
export default combineReducers({
LogInReducer
})
动作.js
import{TOGGLE_LOGIN} from "./actionTypes"
export const ToggleLogin=()=>({
type: TOGGLE_LOGIN
});
actionTypes.js
export const TOGGLE_LOGIN="TOGGLE_LOGIN";
});
store.js
import {createStore} from 'redux';
import rootReducer from './reducers';
export default createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());
解决方案
那是因为在你combineReducer
身上你有一把LogInReducer
钥匙。
所以状态实际上是LogInReducer.isLogged
(在您的 redux-dev-tool 屏幕截图中也可以看到)。
您可能想要这样做:
const mapStateToProps = state => {
const { isLogged } = state.LogInReducer;
return {
isLogged
};
}
推荐阅读
- android - RecyclerView notifyItemChanged 调用 onBindViewHolder 也在不可见的单元格上
- linux - 如果验证失败,如何再次询问用户输入并获取新值?
- android - URI 无法通过 android 访问,但可以通过 UWP 访问
- python - 如何仅使用 pycharm 检查代码功能分析 python 文件?
- python - Django Admin中的外键和其他字段聚合
- firebase - `Firebase` 功能日志中的错误消息:
- c# - 通过变量 UWP 更改按钮 IsEnable
- php - 如何调用内核终止事件
- javascript - 香草JS。从每个方法中的数组中删除对象?
- javascript - PhantomJS 的意外结果