老师,数组和对象作为依赖是不是不太好,不管这个数组和对象是不是 useState里申明的

来源:8-6 用useMemo解决依赖循环问题 - Hook的依赖问题详解

qq_沧海桑田_2

2021-05-28

写回答

3回答

qq_沧海桑田_2

提问者

2021-05-29

//img.mukewang.com/szimg/60b1ca5809cf246b18881190.jpg那老师,如何达成这种效果呢,当tagId和param的值相同 引用不同,useEffect里面的东西不打印呢

const [tagId, setTagId] = useState([4, 5]);

const [params, setParams] = useState({ name: "javk" });


const handleClick = () => {

const diffId = [];

[4, 5].forEach((element) => {

if (tagId.includes(element)) {

diffId.push(element);

}

});

setTagId(diffId);

setParams({ name: "javk" });

};


useEffect(() => {

console.log("params changed");

}, [params]);

useEffect(() => {

console.log("tagId changed");

}, [tagId]);


0
2
qq_沧海桑田_2
回复
Nolan
3q,谢谢老师
2021-05-31
共2条回复

Nolan

2021-05-28

要尽量避免,但是实际情况中不可能完全避免,很多情况下需要用useMemo来控制

0
1
qq_沧海桑田_2
那这个demo应该怎么修改一下才能让diffId和tagId相同的时候,不再打印tagId changed
2021-05-28
共1条回复

qq_沧海桑田_2

提问者

2021-05-28

//img.mukewang.com/szimg/60b0f576095e8b1321181388.jpg

老师,我业务中有这样一段逻辑 就是点击事件处理之后是个[4,5]的数组 ,这个时候会去循环和tagId里面的id做比较,然后把新的id数组给 tagId 有一种情况是 处理之后 diffId和tagId是相同的,但是 tagId change 还是会执行一次,我的预期是不执行,因为id数组是相同的, 怎么处理呢,是哪里有问题嘛 ,

0
0

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程