const [info, setInfo] = useState({
name:'李光洙',
age:'40'
});
useEffect(() => {
console.log('监听成功')
}, [info.name]);
求教useEffect这样监听对象的属性为什么不行呢?该怎么监听对象的属性呢?
const [info, setInfo] = useState({
name:'李光洙',
age:'40'
});
useEffect(() => {
console.log('监听成功')
}, [info.name]);
求教useEffect这样监听对象的属性为什么不行呢?该怎么监听对象的属性呢?
这个问题涉及到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
内的函数。
const [info, setInfo] = useState({
name: '李光洙',
age: '40'
});
const [name, setName] = useState(info.name);
useEffect(() => {
setName(info.name);
}, [info.name]);
useEffect(() => {
console.log('监听成功');
}, [name]);
1 回答1.8k 阅读✓ 已解决
4 回答1.8k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答1.4k 阅读
1 回答1.6k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
每次render时,简单理解为一个普通函数在执行,
info.name
一直是没变话的。比如setInfo({ name: '1', age: 18, })
后,[info.name]
中 info.name 的值一直是 '1',所以不会监听成功。不鼓励把
useEffect
当作一个监听器,而是优先考虑在setInfo
的地方写相关逻辑