reactjs - 登录后重新渲染页面反应
问题描述
我有登录页面组件,我想在成功登录后重新呈现页面。
我的App.js文件:
import React, { Component } from 'react';
import { BrowserRouter as Router, Route } from "react-router-dom";
import Dashboard from "./components/Dashboard";
import Login from "./components/Login";
import "antd/dist/antd.css";
import './App.css';
class App extends Component {
constructor(props){
super(props);
this.state = {loginStatus: "0"};
}
componentDidMount(){
if(localStorage.getItem("user_id")){
this.setState({ loginStatus: "1" });
}
}
render() {
return (
<Router>
<div>
<Route path="/" exact render={(props) => {
if(this.state.loginStatus === "1")
return <Dashboard />;
else
return <Login />;
}}
/>
</div>
</Router>
);
}
}
export default App;
我的 Login.js 是:
import React, { Component } from 'react';
import { Link, Redirect } from "react-router-dom";
import { Input, Card, Icon, Button, Form, message } from 'antd';
const axios = require('axios');
class LoginPage extends Component {
handleSubmit = (e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
axios.get('http://mybackendsite.com/api/login', {
params: {
mobile: "986541123331",
password: "123456789"
}
})
.then(function (response) {
console.log(response.data);
if(response.data.response === "wrong"){
console.log("password is wrong");
}else{
console.log("password is true and logged in successfully");
//SOME CODE TO RERENDER PAGE AND SHOW DASHBOARD
reRenderApp(); //sample function
}
})
.catch(function (error) {
console.log("err is:" + error);
})
}
});
}
render() {
//SOME ELEMENTS
}
我需要一个函数(例如: reRenderApp() )来重新渲染页面并向登录用户显示仪表板。我可以使用 window.location.reload 但我不想这样做。我想要重新渲染页面而不刷新。我该怎么做?
解决方案
您可以做到这一点的方法之一是借助回调函数。
您可以将 App.js 中的道具传递给 Login.js,然后一旦 API 返回登录状态,您就可以调用该回调道具函数,您只需更改 loginStatus 的状态。
这些是可以为您完成工作的少数更改。
在 App.js 中
return (
<Login
onSuccess={() => {
this.setState({ loginStatus: true });
}}
/>
);
在 Login.js 中
//SOME CODE TO RERENDER PAGE AND SHOW DASHBOARD
this.props.onSuccess();
这就是使登录页面组件重新呈现和显示仪表板页面所需要做的所有事情。
希望这个答案能解决您的问题。
推荐阅读
- python - 计算python pandas中的系列数
- c++ - 在 C++ 中重载复制赋值运算符
- arrays - 需要帮助才能使用数组中的图像与数字相结合
- javascript - 使用 Puppeteer 进行 DOM 选择
- javascript - Javascript - 如何从回调中的循环返回?
- python - Bing REST HTTPError(req.full_url, code, msg, hdrs, fp)
- excel - Excel:增加列字母
- javascript - 为什么我有这个范围问题,我该如何解决?
- c++ - 如何将 std::wstring 转换为 char const []
- java - 用键盘快捷键填充 jTextField