const [info, setInfo] = useState({ name:'李光洙', age:'40' }); useEffect(() => { console.log('监听成功') }, [info.name]);
求教useEffect这样监听对象的属性为什么不行呢?该怎么监听对象的属性呢?
const [info, setInfo] = useState({ name: '李光洙', age: '40'});const [name, setName] = useState(info.name);useEffect(() => { setName(info.name);}, [info.name]);useEffect(() => { console.log('监听成功');}, [name]);
每次render时,简单理解为一个普通函数在执行,info.name
一直是没变话的。比如 setInfo({ name: '1', age: 18, })
后,[info.name]
中 info.name 的值一直是 '1',所以不会监听成功。
不鼓励把 useEffect
当作一个监听器,而是优先考虑在 setInfo
的地方写相关逻辑
这个问题涉及到React Hooks的工作方式,特别是useEffect
。在React中,useEffect
是用于执行副作用的函数,它接受一个函数和一个依赖数组作为参数。当依赖数组中的任何值更改时,都会执行该函数。
在你的代码中,你试图通过将info.name
添加到依赖数组来监听info
对象的name
属性的更改。然而,这不会按预期工作,因为info.name
是一个字符串,而不是一个引用。在useEffect
的依赖数组中,你需要传递对象的引用,而不是它的某个属性。
为了解决这个问题,你可以将整个info
对象添加到依赖数组中,如下所示:
const [info, setInfo] = useState({ name:'李光洙', age:'40'});useEffect(() => { console.log('监听成功');}, [info]);
这样,每当info
对象更改时(包括其属性的更改),都会执行useEffect
内的函数。
本文向大家介绍js如何监听对象属性的改变?相关面试题,主要包含被问及js如何监听对象属性的改变?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 我们假设这里有一个user对象, (1)在ES5中可以通过Object.defineProperty来实现已有属性的监听 缺点:如果id不在user对象中,则不能监听id的变化 (2)在ES6中可以通过Proxy来实现 这样即使有属性在user中不
在JavaScript中是否可以监听属性值的更改?例如: 我想响应属性中的任何更改。 我已经阅读了对象,以及该对象的替代对象(包括使用动画事件的对象)。据我所知,它们是关于实际DOM的更改。我更感兴趣的是对一个特定DOM元素的属性更改,所以我不认为仅此而已。当然,在我的实验中,这似乎不起作用。 我希望在没有jQuery的情况下这样做。 谢谢
本文向大家介绍watch怎么深度监听对象变化相关面试题,主要包含被问及watch怎么深度监听对象变化时的应答技巧和注意事项,需要的朋友参考一下 deep设置为true 就可以监听到对象的变化
主要内容:实例,实例本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化。 以下实例通过使用 watch 实现计数器: 实例 <div id = "app"> <p style = "font-size:25px;">计数器: {{ counter }}</p> <button @click = "counter++" style = "font-size:25px
主要内容:实例,实例,实例本章节,我们将为大家介绍 Vue3 监听属性 watch,我们可以通过 watch 来响应数据的变化。 以下实例通过使用 watch 实现计数器: 实例 <div id = "app" > <p style = "font-size:25px;" >计数器 : { { counter } } </p > <button @click = "counter++" style = "f
在使用一个库的时候碰到了一个很奇怪的问题,有个class实例化生成的对象,假设为A 对A的属性进行修改 打印A发现,其中的a属性并没有变,但是直接打印A.a是改变了的,请问这种情况大概会是什么原因呢,是有什么知识盲区吗,目前知道a属性是不可删除的属性,但是一般对象设置configurable=false也不会出现这种情况,如果不允许修改的话应该也会报错。。 (PS:A只是为了表述简化的例子,并不是