首页 > 解决方案 > 在此错误消息中“直接在 useEffect 中移动此变量”是什么意思?

问题描述

我试图通过道具将对象传递给子组件。该值在 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/exhaustive-deps"

标签: reactjsreact-hooksuse-effect

解决方案


关于useEffect钩子:

通过使用这个 Hook,你告诉 React 你的组件需要在渲染之后做一些事情。React 会记住您传递的函数(我们将其称为“效果”),并在执行 DOM 更新后稍后调用它。更多的

这意味着内部的函数useEffect将在组件渲染后被调用。这就是为什么你有一个空对象。

关于错误。你拥有它是因为 React 不记得你的users变量——它将在每次渲染SetValue组件时重新创建。最好使用useState钩子设置值useEffect并在下一次渲染时记住它。

还有一个注意事项。不要忘记将第二个参数useEffect与一组依赖项一起传递。现在你的钩子将在每次渲染SetValue组件后被调用。

以下是useState钩子的使用方法:

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;

推荐阅读