Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在React hook组件卸载时,无法获取更新的状态变量值_Reactjs_React Hooks_Use Effect - Fatal编程技术网

Reactjs 在React hook组件卸载时,无法获取更新的状态变量值

Reactjs 在React hook组件卸载时,无法获取更新的状态变量值,reactjs,react-hooks,use-effect,Reactjs,React Hooks,Use Effect,单击“单击我”按钮后,我的计数值正在更新。现在,在卸载组件之前,我必须做一些事情,如果count大于0 但我注意到在调试器期间,计数值始终为0。当我期望计数应该大于0时,如果我多次单击 请帮助我,如何在组件卸载期间获取更新值。谢谢 import React, { useState, useEffect } from 'react'; function Example() { const [count, setCount] = useState(0); useEffect(()

单击“单击我”按钮后,我的计数值正在更新。现在,在卸载组件之前,我必须做一些事情,如果count大于0

但我注意到在调试器期间,计数值始终为0。当我期望计数应该大于0时,如果我多次单击

请帮助我,如何在组件卸载期间获取更新值。谢谢

import React, { useState, useEffect } from 'react';

function Example() {
    const [count, setCount] = useState(0);

    useEffect(() => {
    //ComponentDidMount 

    return(()=>{                        
        //componentWillUnmount
        alert(count); //count 0  
        if(count){
            //Do Something                
        }           
    })        
    },[]);

    useEffect(() => {
    document.title = `You clicked ${count} times`;        
    });

    return (
    <div>
        <p>You clicked {count} times</p>
        <button onClick={() => setCount(count + 1)}>
        Click me
        </button>
    </div>
    );
}

在useEffect中设置清理函数时,您正在对count的原始值形成闭包。这意味着即使count的值在状态中更新,count的值在cleanup函数中仍保持为0

为了避免这种情况,您需要为useEffect的依赖项数组添加count。这样,当count在状态中更新并且组件重新渲染时,cleanup函数也会使用count的最新值进行更新


在useEffect中设置清理函数时,您正在对count的原始值形成闭包。这意味着即使count的值在状态中更新,count的值在cleanup函数中仍保持为0

为了避免这种情况,您需要为useEffect的依赖项数组添加count。这样,当count在状态中更新并且组件重新渲染时,cleanup函数也会使用count的最新值进行更新

useEffect(() => {
  return (()=> {                        
    alert(count); // this will now be latest value of count on unmount
    if(count) {
      // Do Something                
    }           
  })        
}, [count]); // add is now a dependency of useEffect