前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hooks实现思路

hooks实现思路

作者头像
刘嘿哈
发布2022-10-25 14:18:49
2050
发布2022-10-25 14:18:49
举报
文章被收录于专栏:js笔记js笔记
代码语言:javascript
复制
var wipFiber; //当前处理的fiber 处理function组件时给它赋值function的fiber
// 该代码会在初始化和更新时执行
export default function useState(init){
    // wipFiber.base是上一次的fiber,获取上次的hook
    //  base是老fiber wipFiber.hooksIndex是这次的第几个
    const oldHook=wipFiber.base&&wipFiber.base.hooks[wipFiber.hooksIndex];
    //定义当前的fiber
    const fiber={
        state:oldHook.state||init,
        queue:oldHook.queue||[]
    }
    // 模拟批量更新
    hook.queue.forEach(action=>hook.state=action);
  //该代码就是hook函数的第二个返回值,执行它把未来值加入到更新队列,然后强制更新。
    const setState=action=>{
        // setState时将值添加到更新队列
        hook.queue.push(action);
        // requestIdCallback 中会判断wipRoot的值,如果处理完fiber,就更新dom
        wipRoot={
            node:currentRoot.node,
            props:currentRoot.props,
            base:currentRoot
        }
        // requestIdCallback 中会判断nextUnitOfWork的值,如果存在会创建新的fiber架构
        nextUnitOfWork=wipFiber;
    }
    // hook加入到fiber的hooks中
    wipFiber.hooks.push(hook);
    wipFiber.hooksIndex++;


}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档