我有一个react状态变量,我想检查是否有什么变化,然后我的**useEffect()钩子可以感应到,并 * show * me the submit button visible.因此我有原来的const变量,我用useState()**做了相同变量的状态副本.
例如:
const abc = {MONDAY:{OperatingHours: ["00:00", "23:59"], toggle: false}, TUESDAY:...};
const[stateAbc, setStateAbc] = useState(MONDAY:{OperatingHours: ["00:00", "23:59"], toggle: false}, TUESDAY:...});
我想在我的React组件中比较这两个变量。如果showButton设置为false,我将不会使按钮可见,否则我将使它可见。
当我在运行应用程序时将状态变量更改(如 * OperatingHours *)回初始状态["00:00","23:59"]时,我无法进入此条件(abc === stateAbc),并且提交按钮仍然可见:
const initialRender = useRef(true);
useEffect(() => {
if (initialRender.current) {
initialRender.current = false;
}
if (abc === stateAbc) {
setSubmitButtonDisabled(true); // This condition is never meeting
}
if (abc !== stateAbc) {
setSubmitButtonDisabled(false);
}
}, [stateAbc]);
2条答案
按热度按时间bhmjp9jg1#
将对象与
===
进行比较,仅当对象相同时才给出true:有时候你会看到开发人员使用
JSON.stringify(a) === JSON.stringify(b)
,但它一点也不安全,对象属性的顺序并不总是相同的:如果要比较的对象很简单(所有值都是基元值),则可以通过迭代以下属性来比较它们:
但是如果你有嵌套对象,最好的方法是使用一个npm包进行比较,比如deep-equal。
xzlaal3s2#
如果我们有两个对象Obj_1和Obj_2
在JavaScript中,当比较两个对象时,条件Obj_1 === Obj_2将比较Obj_1对象的引用与Obj_2对象的引用...这意味着即使两个对象内部包含相同的属性..比较也将始终返回false!
从谷歌中快速搜索“如何比较两个对象”。。我找到的第一个答案是在进行比较之前先将对象字符串化。。这意味着将对象及其属性转换为字符串,然后在字符串之间进行比较:)
你的情况应该是这样的