提问者:小点点

在这个错误消息中,将这个变量直接移动到use效应中是什么意思?


我试图通过道具将对象传递给子组件。该值在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内部移动此变量


共2个答案

匿名用户

关于useffecthook:

通过使用这个钩子,您可以告诉React组件在渲染后需要执行某些操作。React将记住您传递的函数(我们将其称为“effect”),并在执行DOM更新后调用它。更多

这意味着在呈现组件后将调用useffect中的函数。这就是为什么你有一个空的对象。

关于错误。您之所以拥有它,是因为React不记得您的用户变量-它将在设置值组件的每次渲染中重新创建。最好使用useStatehook在useffect中设置值,并在下次渲染时记住它。

还有一张纸条。不要忘记在useffect中传递第二个参数和一个依赖项数组。现在,每次渲染SetValue组件后都会调用钩子。

下面是如何使用useStatehook:

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中。