reactjs - React redux、logout 和 loggin 使用 store 不会更新页面
问题描述
好的,就像标题说的那样,我使用 store 和 reducer 来注销和登录。
问题是当我分派注销时,由于某种原因它不会更新组件
这是我的代码
用户
export function userIdLogedIn() {
return false;
}
export function userReducer(state, action) {
console.log(action);
switch (action.type) {
case "LOGIN":
return {
userIdLogedIn: true,
...state
};
case "LOGOUT":
return {
userIdLogedIn: false,
...state
};
default:
return {
userIdLogedIn: false,
...state
};
}
}
然后我有 Cominereducer
import { combineReducers } from 'redux'
import favoritsReducer from './Favorits'
import { userIdLogedIn, userReducer} from './User'
const allReducer = combineReducers({
favorits: favoritsReducer,
userIdLogedIn: userIdLogedIn,
userReducer: userReducer
});
export default allReducer;
这是我的应用程序
import * as React from 'react';
import Layout from './components/Layout';
import Home from './components/Home';
import Info from './components/info'
import Search from './components/search'
import Favorit from './components/Favorit'
import * as API from './components/API'
import Login from './components/Login'
import Chapter from './components/Chapter'
import { GoogleLogin, GoogleLogout } from 'react-google-login';
import './custom.css'
import "react-loader-spinner/dist/loader/css/react-spinner-loader.css"
import { connect } from 'react-redux'
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
class App extends React.Component<({ login: Function, logout: Function, userIdLogedIn: Boolean })> {
componentDidMount() {
var ref = this;
//API.userLogedinAsync().then(x => ref.setState({ userIsLogged: x }));
console.log(this.props.userIdLogedIn);
}
responseGoogle(r) {
var email = r.profileObj.email;
var image = r.profileObj.imageUrl;
API.authAsync(email, image);
this.props.login();
//this.setState({ userIdLogged: true });
//window.location.href = window.location.href;
}
async logOut() {
await API.signOutAsync();
this.props.logout();
//this.setState({ userIdLogged: false });
//window.location.href = window.location.origin;
}
render() {
return <Router>
<nav>
<ul className="header">
<li className="logo"><Link to="/"> <img src={require("./Images/icon.png")} width="24" /></Link></li>
{
this.props.userIdLogedIn === false ?
<li>
<GoogleLogin
clientId="****-akj6ujapgd722u0kqaib2lmca3mu71vt.apps.googleusercontent.com"
buttonText="Login"
render={renderProps => (
<a href="#" onClick={renderProps.onClick}>Login</a>
)}
onSuccess={this.responseGoogle.bind(this)}
isSignedIn={true}
onFailure={this.responseGoogle.bind(this)}
/>
</li> :
<li>
<GoogleLogout
clientId="*****-akj6ujapgd722u0kqaib2lmca3mu71vt.apps.googleusercontent.com"
buttonText="Logout"
render={renderProps => (
<a href="#" onClick={renderProps.onClick}>Signout</a>
)}
onLogoutSuccess={this.logOut.bind(this)}
/>
</li>
}
{
this.props.userIdLogedIn === true ?
<li>
<Link to="/favorit">Favorit</Link>
</li> : ""
}
<li>
<Link to="/search">Search</Link>
</li>
<li>
<Link to="/">Novels</Link>
</li>
</ul>
</nav>
<Layout>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
<Switch>
<Route path="/" exact>
<Home />
</Route>
<Route path="/info" component={Info} />
<Route path="/search">
<Search />
</Route>
<Route path="/login">
<Login />
</Route>
<Route path="/favorit" component={Favorit} />
<Route path="/chapter" component={Chapter} />
</Switch>
</Layout>
</Router>
}
};
function mapToProb(state: { userIdLogedIn: boolean }) {
return {
userIdLogedIn: state.userIdLogedIn
}
}
function dispatchToProb(dispatch) {
return {
login: () => { dispatch({ type: "LOGIN" }) },
logout: () => { dispatch({ type: "LOGOUT" }) }
}
}
export default connect(mapToProb, dispatchToProb)(App)
我在这里做错了什么请帮助我理解
解决方案
也许它被覆盖了。试试这个并检查。
export function userReducer(state, action) {
console.log(action);
switch (action.type) {
case "LOGIN":
return {
...state, <-------
userIdLogedIn: true
};
case "LOGOUT":
return {
...state, <-------
userIdLogedIn: false
};
default:
return {
...state, <-------
userIdLogedIn: false
};
}
}
推荐阅读
- android - android studio 从listivew 中删除
- vue.js - nuxt-optimized-images 可变大小参数不起作用(或 webpack 加载问题?)
- amazon-web-services - 无等待的 AWS SQS
- reactjs - 导入 react-admin 中断 tsc 构建
- r - 模式中两个字符串内的字符串
- java - 使用 Ionic 构建时出现错误“您的 JAVA_HOME 无效”,设置了 PATH 和 JAVA_HOME 变量
- matlab - 在 MATLAB 中将函数/方程存储在数组中
- react-native - 我的 react native flatlist 中的一个错误一直弹到顶部而无法继续滚动
- java - 此权限是什么意思,我该如何授予?accessControlException 访问被拒绝(“java.util.PropertyPermission”“javafx.verbose”“read”)
- c# - LINQ Where 中的参数变为空,这对我来说没有意义。为什么会这样?