首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React useEffect - useEffect中未定义的变量

React useEffect - useEffect中未定义的变量
EN

Stack Overflow用户
提问于 2022-02-15 14:28:48
回答 1查看 3.7K关注 0票数 0

我有这种情况,我不知道为什么会这样..

我有一个自定义钩子,它包含一个在执行另一个函数之前无法初始化的变量。

我认为这与同步情况无关,因为console.log( '..',名称)在执行useEffect()之前显示变量的值,我还放置了一个按钮来手动触发useEffect挂钩(使用另一个状态变量并在onClick函数中更改他的值),并且该值也未定义。

代码语言:javascript
复制
export const useMagic = () => {
 ...
 let name: string;
 ...

 const initMagic = async () => {
      ...     
      name= 'Copperfield';
      console.log('the value of the variable is:', name);
      ...
 }

 useEffect(()=> {
      const loadRabbit = async () => {
          console.log('The name is', name); //undefined *** HERE IS THE PROBLEM ***
      }

      loadRabbit();
      
}, [someDeps]); // I can't put name inside the dependencies because is used before being assigned. I can't initialize the variable because I need another value to create it. 

}

我在变量上使用useRef解决了这种情况,并将其放在依赖数组中。

但是,为什么会这样呢?有些事情我不知道如何反应管理变量的值。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-02-15 14:38:24

useMagic钩子中声明一个局部变量。

这意味着每次调用钩子时,都会得到一个新的name变量,即undefined。异步initMagic保存对特定name通过闭包的引用。这就是为什么它打印正确的价值。

如果希望在重呈现(对组件/钩子的多次调用)之间保留值,则需要使用useStateuseRef

这就是他们实际上在幕后所做的事情:他们在重新呈现(调用)之间返回存储值。

因此,这将是解决您的问题的一个方法:

代码语言:javascript
复制
const [name, setName] = useState();

const initMagic = async () => {
      ...     
      setName('Copperfield');
      console.log('the value of the variable is:', name);
      ...
 }

现在,您可以使用name作为任何useEffect的适当标记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71128196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档