Javascript Reactjs useffect检查对象';s财产';s值

Javascript Reactjs useffect检查对象';s财产';s值,javascript,reactjs,use-effect,Javascript,Reactjs,Use Effect,我有一个表单,每当表单中的任何输入发生更改时,它都会触发上下文的更改。表单写入一个对象,然后将该对象传递给上下文。上下文对象如下所示 let form = { trialExperationDate: trialExperationDate, nextUserDate: nextUserDate, linkText: copyText, postalCode: formPostal, phone: formPhone, email: formEma

我有一个表单,每当表单中的任何输入发生更改时,它都会触发上下文的更改。表单写入一个对象,然后将该对象传递给上下文。上下文对象如下所示

let form = {
    trialExperationDate: trialExperationDate,
    nextUserDate: nextUserDate,
    linkText: copyText,
    postalCode: formPostal,
    phone: formPhone,
    email: formEmail,
    pwRef: formPwRef
};
其中,最初每个属性值都是
'
。在我的组件中,我希望通过上下文API观察对象的变化,如果有任何字段
!='',则增加
count
变量

我的代码看起来像这样

const [context] = useContext(FormContext);
let numChange = 0;

function isNotEmptyObject(o) {
    Object.keys(o).every(function(x) {
        if(o[x]!==''||o[x]!==null || o[x] !== undefined) {
            numChange += 1
        }
    });
}

useEffect(() => {
    isNotEmptyObject(context)
}, [context]);

问题是,
numchange
始终保持在0。为什么?我已确认上下文中的对象正在更新。

当您从React.useffect()返回函数时,它将在卸载时调用该函数。如果您希望它在第一次装载和上下文更改时启动,请删除返回。

我尝试过,没有区别,但我将修改我的问题以反映这一点。谢谢,我相信
numChange
在每次渲染时都被设置为0,因为
let numChange=0组件内部。我会给
numChange
一个状态变量`const[numChange,setNumChange]=React.useState(0)有趣的是,现在每当对对象中的任何属性进行更改时,计数都会增加1,即使我希望只对值不是“”的对象属性计数一次。。。有什么想法吗?那不就是你的职责吗?根据函数的逻辑,每次更新一个值时,numChange将递增,您在另一个组件中调用的
setContext
。但是我在活动组件中记录context.log,以确保context正在更新,而实际上它正在更新