reactjs - 使用功能组件渲染后响应访问状态
问题描述
我是 React 功能组件的新手,我有一个子组件和父组件,它们的某些状态会使用 useEffect 进行更新,该状态显然会在渲染后重置为其初始值。
父级有一个传递给子级的用户列表:
家长:
const Parent = () => {
const [users, setUsers] = useState([])
const getUsers = () => {
setUsers(["pedro", "juan"])
}
useEffect(() => {
getUsers()
}, []);
return <div>
<Child users={users} />
}
孩子:
const Child = () => {
const [users, setUsers] = useState([])
useEffect(() => {
setUsers(props.users)
}, [[...props.users]]);
}
如果我出于任何原因尝试从我的子组件或父组件访问状态(用户),我会得到我的初始值,它是一个空数组,而不是我从 getUsers() 更新的值,通常使用父类组件我会拥有访问该信息没有问题,但功能组件的行为似乎不同?还是由useEffect引起的?通常我会为父级使用一个类组件,但我使用的一些库依赖于 Hooks,所以我有点被迫使用功能性组件。
解决方案
您尝试访问数据和传递数据的方式有几个错误。
您应该适应提升状态的概念,这意味着如果您将用户传递给您的 Child 组件,请确保所有有关添加或删除或更新用户的逻辑都保留在 Parent 函数中,并由 Child 组件负责仅用于显示用户列表。
这是一个受您上面共享的代码启发的代码沙箱。我希望这能回答你的问题,如果不是,请告诉我。
还分享下面的代码。
import React, { useState } from "react";
export default function Parent() {
const [users, setUsers] = useState([]);
let [userNumber, setUserNumber] = useState(1); // only for distinctive users,
//can be ignored for regular implementation
const setRandomUsers = () => {
let newUser = {};
newUser.name = `user ${userNumber}`;
setUsers([...users, newUser]);
setUserNumber(++userNumber);
};
return (
<div className="App">
<button onClick={setRandomUsers}>Add New User</button>
<Child users={users} />
</div>
);
}
const Child = props => {
return (
props.users &&
props.users.map((user, index) => <div key={index}>{user.name}</div>)
);
};
推荐阅读
- svelte - 在用户选择值之前有条件地呈现占位符
- react-native - 在开发应用程序上遇到 Expo 问题,但在本地的同一个应用程序上却没有
- c# - 字符串MongoDB中的InsertMany json
- arrays - 使用 Numpy genfromtext 导入数据并使用日期时间格式化列
- powershell - 函数的Powershell返回值让我发疯
- react-native - React 阿联酋本地支付网关
- r - 根据另一个向量中的观察结果计算长度为 0 和 1 的向量
- javascript - 如何防止 Chrome 在离线时加载缓存的网页?
- python - 使用openCV Python自动控制PC上的应用程序
- javascript - 如何在遍历期间从 Babel 节点获取代码作为字符串