Mat*_*att 1 javascript reactjs
我已经创建起反应,因此当存储在用户登录时重新加载页面,我已经加入,如果存在会话,然后要么应该检查功能的会话的登录系统setState(),以true或false。
由于我是React的新手,所以我不确定如何执行此功能。请在下面查看我的App.js代码:
import React from 'react';
import './css/App.css';
import LoginForm from "./LoginForm";
import Dashboard from "./Dashboard";
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
renderLoginForm: true
};
this.handleLoginFormMount = this.handleLoginFormMount.bind(this);
}
handleLoginFormMount() {
this.setState({
renderLoginForm: false
});
}
// Check session function.
checkSession() {
fetch('/check-session', {
credentials: 'include'
})
.then((response) => {
return response.json();
})
.then((sessionResult) => {
if (sessionResult.username) {
console.log('false');
this.setState({
renderLoginForm: false
});
} else {
console.log('true');
this.setState({
renderLoginForm: true
});
}
})
.catch((error) => {
console.log('Error: ', error);
});
}
render() {
checkSession();
return (
<div className="App">
{this.state.renderLoginForm ? <LoginForm mountLoginForm={this.handleLoginFormMount} /> : null}
{this.state.renderLoginForm ? null : <Dashboard />}
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
有checkSession()在这个位置输出在加载页面时,控制台的情况如下:
Line 50: 'checkSession' is not defined no-undef
如果将函数放在之外class App extends React.Component {},则它告诉我无法设置未定义状态。
Ani*_*ngh 15
功能组件:就我而言,我希望我的代码在组件呈现在屏幕上之前运行。useLayoutEffect是 React 为此目的提供的一个钩子。
import React, { useLayoutEffect } from "react";
...
const App = () => {
useLayoutEffect(() => {
//check local token or something
}, []);
}
Run Code Online (Sandbox Code Playgroud)
阅读更多: https: //reactjs.org/docs/hooks-reference.html#uselayouteffect
有
checkSession()在这个位置输出在加载页面时,控制台的情况如下:Run Code Online (Sandbox Code Playgroud)Line 50: 'checkSession' is not defined no-undef
那是因为它是一种方法,但是您像一个独立的函数一样调用它。电话应该是this.checkSession();。但是请继续阅读。
分别:
该render函数必须是纯函数,不能有诸如更改状态之类的副作用。而是将任何副作用代码放入componentDidMount; 中。从该生命周期方法的文档中:
如果需要从远程端点加载数据,这是实例化网络请求的好地方。
确保您的组件针对原始状态(在会话检查之前)以及更新后的状态(在会话检查之后)正确呈现。
或者,如果该组件没有会话就无法做任何有用的事情,则可以将会话检查移至其父组件,并让父组件仅在具有会话检查结果时才渲染此子组件。
| 归档时间: |
|
| 查看次数: |
4125 次 |
| 最近记录: |