我试图通过道具将对象传递给子组件。该值在useEffect钩子中设置,并在传递给我的子组件时丢失。
我曾尝试在单独的函数中设置useEffect钩子外部对象的值,但该值仍然丢失。
import React, { useState, useEffect } from 'react';
function SetValue(props){
let users = {};
useEffect(() => {
users = { user: 'bob' };
})
return <NewComponent users={users} />
}
export default SetValue;
我期望props.users{user:'bob'}而不是一个空对象{}。
错误消息是:
每次渲染后,从React Hook useEffect内部对“users”变量的赋值将丢失。若要随时间保留该值,请将其存储在useRef Hook中,并将可变值保留在“.current”属性中。否则,您可以直接在useEffect React hooks/deps内部移动此变量
关于useffect
hook:
通过使用这个钩子,您可以告诉React组件在渲染后需要执行某些操作。React将记住您传递的函数(我们将其称为“effect”),并在执行DOM更新后调用它。更多
这意味着在呈现组件后将调用useffect
中的函数。这就是为什么你有一个空的对象。
关于错误。您之所以拥有它,是因为React不记得您的用户
变量-它将在设置值
组件的每次渲染中重新创建。最好使用useState
hook在useffect
中设置值,并在下次渲染时记住它。
还有一张纸条。不要忘记在useffect
中传递第二个参数和一个依赖项数组。现在,每次渲染SetValue
组件后都会调用钩子。
下面是如何使用useState
hook:
import React, { useState, useEffect } from 'react';
function SetValue(props){
const [users, setUsers] = useState({});
useEffect(() => {
setUsers({ user: 'bob' });
}, [
//here you could pass dependencies, or leave it empty to call this effect only on first render
]);
return <NewComponent users={users} />
}
export default SetValue;
此警告--“在每次渲染后,从React Hook useEffect内部分配给'users'变量的内容将丢失--这就是React中存在状态概念的原因。React组件在连续的重新渲染(组件生命周期)中不会保留普通javascript变量的值。”.这就是react状态的作用所在,这样当组件重新呈现时,对状态的更改可以反映在DOM中。