请稍等 ...
×

采纳答案成功!

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

useState代码是不是有错误啊!

export function useState(initialValue) {
  states[hookIndex] = states[hookIndex] || initialValue;
  const currentIndex = hookIndex; //这段代码赋值有问题啊   hookIndex一直是 0  啊!请老师解答下
  function setState(newState) {
    states[currentIndex] = newState;
    emitUpdateForHooks();
  }
  return [states[hookIndex++], setState];
}	  

const currentIndex = hookIndex; 这段代码赋值有问题啊 hookIndex一直是 0 啊!请老师解答下

正在回答

1回答

不会一直为0啊,这行代码:

return [states[hookIndex++], setState];

执行后hookIndex会递增的

0 回复 有任何疑惑可以回复我~
  • 提问者 xiao诚 #1
    你是第一次执行后递增  但是在执行setState的时候 我们用的数值还是缓存下来的没有hookIndex++的值啊
    回复 有任何疑惑可以回复我~ 2023-11-07 14:54:07
  • 杨艺韬 回复 提问者 xiao诚 #2
    setState本身就不需要递增,这个hookIndex只是为了识别第几次调用useState
    回复 有任何疑惑可以回复我~ 2023-11-07 17:08:07
  • 提问者 xiao诚 回复 杨艺韬 #3
    第一步: useSate hookIndex=0   currentIndex=0     states=[0],  第二步:当执行 setState 的时候states[currentIndex] = newState;   hookIndex=1   currentIndex=0    states=[1],  重写了 states=[1] 相当于数组没有新增长度,触发更新,第三步:useSate hookIndex=1  currentIndex=1     states=[1]  此时因为没有足够长度 就会报错    正常写法是不用currentIndex直接用hookIndex
    回复 有任何疑惑可以回复我~ 2023-11-07 21:32:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信