请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,关于useMemo的执行

老师您好我先上图图片描述
这个是您本节课中的一个小案例,我将count改成初始值为1,其他条件不变。此时double一上来就成了2,
然后一直等count变成3,double变成了6,然后下次变成了8,此后double不再变化。我不是很明白这个执行逻辑。
如果是先判断再执行计算,那么为什么后面还会继续执行一个8才会停止呢
如果是先执行计算再判断,那么为什么count等于3的时候double就直接等于6了,而不是直接变成8呢?
我猜按照道理来讲,应该是先执行判断再执行计算逻辑,但是不是很清楚为什么会多执行一个8才会停止。
老师这个执行逻辑我有点想不明白,你能帮我解答一下嘛 谢谢

正在回答

1回答

同学你好,

count=1     count===3 = false  double = 2
count=2     count===3 = false  double = 2
count=3     count===3 = true   double = 6
count=4     count===3 = false  double = 8
count=5     count===3 = false  double = 8

观察上面中间三行,只有这三行才触发了count===3表达式计算值的变化,也就是触发useMemo的重新计算。

程序只要要执行一次,得double的值,后面都是根据表达式的取值是否变化来决定是否重新计算。从count=4开始,count===3一直是false,不再变化,因此doubke始终保持8。

注意这只是一个demo,未来React不会承诺use*的运行时机,即:即使表达式不发生变化,也可能重新运行Hook函数。

祝您学习愉快!

1 回复 有任何疑惑可以回复我~
  • 提问者 袁门弟子 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-06-02 18:07:57
  • 提问者 袁门弟子 #2
    啊啊啊 老师我明白啦,我第一次学的时候忘记了第二项的判断条件是数组中的数据是否发生改变。您使用了bool表达式的方法,让我误以为是true的时候就会执行。原来和值的属性无关,而是因为bool发生了变化!哇哈哈哈
    回复 有任何疑惑可以回复我~ 2020-06-02 18:09:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信