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正在更新,而实际上它正在更新