老师,帮忙看下为什么登录后也跳转不了vip页
login部分:
import React, { Component, Fragment} from "react";
import "antd/dist/antd.css";
import { Modal, Button, message} from 'antd';
// 导入样式
import "./sign.css";
import axios from "axios";
import { Link } from "react-router-dom";
class Sign extends Component {
constructor(props) {
super(props)
this.showModal = this.showModal.bind(this)
this.handleOk = this.handleOk.bind(this)
this.handleCancel = this.handleCancel.bind(this);
this.setName = this.setName.bind(this);
this.setPassWord = this.setPassWord.bind(this);
this.outLogin = this.outLogin.bind(this)
this.nameDom = "";
this.passwordDome = "";
this.state = {
name: '',
password: '',
isModalVisible: false,
login:false
}
}
shouldComponentUpdate() {
if (this.state.nameDom && this.state.passwordDome) {
return false
} else {
return true
}
}
render() {
return (
<div className='sign'>
<Fragment>
{
this.state.login ?
<Button className='sign-btn' type="primary" onClick={this.showModal}>登录</Button> :
<Button className='sign-btn' type="primary" onClick={this.outLogin}>退出</Button>
}
<Link to='/vip'><Button className='sign-btn' type="primary">VIP</Button></Link>
<Modal title="登录" visible={this.state.isModalVisible} onOk={this.handleOk} onCancel={this.handleCancel}>
<div className='input-name' style={{marginBottom:'10px'}}><input onChange={this.setName} value={this.state.name} placeholder='请输入用户名'></input></div>
<div className='input-password'><input onChange={this.setPassWord} value={this.state.password} placeholder='请输入密码'></input></div>
</Modal>
</Fragment>
</div>
)
}
showModal() {
const isModalVisible = true;
this.setState({ isModalVisible })
};
handleOk() {
// 将用户名和密码添加到url并发送
const url = `http://www.dell-lee.com/react/api/login.json?user=${this.state.name}&password=${this.state.password}`;
axios(url,{withCredentials:true}).then(response=>{
// 获取登录结果
const {login} = response.data.data;
if(login){
// 登录成功
message.info('登录成功');
// 关闭登录框,并更新状态
this.setState({
isModalVisible: false,
login:false
})
}else{
// 登录失败
message.info('登录失败');
}
})
};
handleCancel() {
const isModalVisible = false;
this.setState({ isModalVisible })
};
componentDidMount(){
axios('http://www.dell-lee.com/react/api/isLogin.json',{withCredentials:true}).then(response=>{
const {login} = response.data.data
this.setState({login})
})
}
// 设置用户名
setName(e){
const {value} =e.target
this.setState({
name:value
})
}
// 设置密码
setPassWord(e){
const {value} =e.target
this.setState({
password:value
})
}
// 退出登录
outLogin(){
axios('http://www.dell-lee.com/react/api/logout.json',{withCredentials:true}).then(response=>{
const {logout}=response.data.data;
// 设置登录状态
this.setState({
login: logout
})
})
}
}
export default Sign
vip部分:
import React, { Component} from "react";
import { Redirect } from "react-router";
import axios from "axios";
import "./vip.css"
class Vip extends Component {
constructor(props){
super(props)
this.state={
login:false
}
}
render(){
// 登录状态下
console.log(this.state.login)
if(this.state.login){
return <div className='vip'>vip</div>
}else{
// 非登录状态下跳回首页
return <Redirect to='/' />
}
}
componentDidMount(){
axios('http://www.dell-lee.com/react/api/isLogin.json',{withCredentials:true}).then(response=>{
const {login} = response.data.data
this.setState({login:login})
})
}
}
export default Vip
相关截图:
问题描述:
测试了一下好像是这里的setState没有起作用,这是为什么呢
11
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕久久
2021-10-06 12:53:53
同学你好,新版本的谷歌浏览器不支持跨域携带cookie,因此可能导致即使登录了,也无法跳转到vip页面。建议同学换成火狐、360浏览器测试一下。
另外,同学的逻辑有问题:
登录页,登录成功后,应该显示“退出按钮”:
因此,各个方法中,设置login变量时,要注意login的值是true还是false,例如:
其他方法中login的值,也需要调整。
vip页面:
login的初始值是false,componentDidMount执行后,不会执行render方法,因此即使登录成功,也不会将login改成true,需要借助其他变量实现效果:
建议同学参考源码,把上述代码中的问题都调整一下。
如果有疑问,建议新建问题,再把代码粘贴上来,老师帮你调整。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星