javascript - 如何更新 react-hooks 中的初始值(几个数据)?
问题描述
在我创建了一个函数来设置当前用户登录的值数据并在 useEffect 中调用它后,我收到了一条警告消息。这是代码:
import React, { useEffect, useState } from "react";
...
const AddPost = () => {
const userStorage = sessionStorage.getItem('user');
const [values, setValues] = useState({
userId: '',
authorName: '',
title: '',
content: '',
likes: '',
dislikes: ''
});
useEffect(() => {
getCurrentUserInfo();
},[]);
const getCurrentUserInfo = () => {
if(userStorage !== null) {
setValues({
...values,
userId: userStorage.id,
authorName: userStorage.userName,
})
}
}
...
export default AddPost;
我只想从用户登录的数据中设置 userId 和 authorName,所以在函数 setValues 中我得到所有初始值,然后我只更新 userId 和 authorName。突然在我的浏览器控制台中出现警告消息,它说
React Hook useEffect has a missing dependency: 'getCurrentUserInfo'. Either include it or remove the dependency array
我尝试删除[]
in useEffect
,但这会导致我的浏览器滞后,因为useEffect
执行循环调用函数。我尝试在里面添加values
和userStorage
/或其中之一[]
,仍然没有成功。有什么解决方案吗?
解决方案
始终建议在 useEffect 挂钩所需的数组中添加所有依赖项,在您的情况下是 getCurrentUserInfo 函数,这就是它显示警告的原因。
为避免这种情况,您可以在 useEffect 挂钩中定义 getCurrentUserInfo ,而不将其作为依赖项提供。您还可以使用回调模式来更新状态以避免将值作为依赖项,并且您仍然需要提供 userStorage 作为依赖项。对于 userStorage,您可以使用 useMemo 记住该值,这样它就不会导致重新渲染。
const userStorage = useMemo(() => sessionStorage.getItem('user'), [sessionStorage]);
useEffect(() => {
const getCurrentUserInfo = () => {
if(userStorage !== null) {
setValues(values => ({
...values,
userId: userStorage.id,
authorName: userStorage.userName,
}))
}
}
getCurrentUserInfo();
},[userStorage]);
推荐阅读
- scala.js - 如何处理 scala.js 外观中的可为空值?
- google-chrome-extension - 安装扩展时使用 GET 请求将数据保存在本地存储中
- react-native - 使用 react-navigation 多连接到 Redux
- c# - 如何在自上而下的屏幕上制作列表视图
- python-3.x - Apache Beam Cloud Dataflow 读取所有数据的效率
- flutter - 如何在颤动中创建 Instagram 不断变化的渐变背景
- c# - 将项目 A 中的配置值读入项目 B
- sql - 如何在不多次查询 max(column_name)+1 的情况下在表中插入行?
- javascript - 检索频道标识符的问题 - Discord.JS
- reactjs - 如何使用 MUI-Data-Tables 呈现列内的项目数组?