reactjs - 这是使用reactjs上下文的正确方法吗
问题描述
我刚开始写 reactjs 几个星期。最近,我使用上下文来实现网络会话,代码如下:
这是正确的方法吗?如果导入了上下文组件,任何组件都可以更改上下文中的值,并且上下文中的值可以在组件之间传递。
会话上下文.js
import React from 'react';
export const SessionContext = React.createContext({
authenticated: false,
username: ''
});
登录.js
import React, { useRef, useContext } from 'react';
import { useHistory } from 'react-router-dom';
import { SessionContext } from '../common/SessionContext';
import './Login.css';
export default function Login() {
const sessionContext = useContext(SessionContext);
const history = useHistory();
const username= useRef('');
const password= useRef('');
const login = () => {
sessionContext.authenticated = true;
sessionContext.username = username.current.value;
history.push("/home");
};
return (
...avoid too much code complain...
);
}
主页.js
import React, { useContext, useEffect } from 'react';
import { useHistory } from 'react-router-dom';
import { SessionContext } from './SessionContext';
import TopAppBar from './TopAppBar';
import LeftDrawer from './LeftDrawer';
export default function Home(props) {
const sessionContext = useContext(SessionContext);
const history = useHistory();
useEffect(() => {
if (!sessionContext.authenticated) {
history.push("/");
}
});
return (
<div>
<LeftDrawer/>
<TopAppBar />
</div>
);
}
解决方案
推荐阅读
- c# - C# label.text 在按钮单击时不会更改
- node.js - Discord.js 音乐机器人不响应第一个音乐请求
- java - 如何在关键短语之间获取字符串的某个部分(java)
- python - Python 无法访问命令行参数
- flutter - 可滚动屏幕 - Flutter
- python - OpenCV Python-过滤矩形以找到微型汽车的道路中心线
- javascript - ajax 没有获取会话
- php - Laravel 验证 - 不同的数组字段不起作用
- django - Django 模型字段未显示在管理页面中
- firebase - Firebase 模拟器:datasnapshot.ref 抛出“无法解析 Firebase url ...”