react如何实现hooks?必须依赖 Fiber 么?( 三 )


hooks 的实现原理其实不复杂 , 就是在某个上下文中存放一个链表 , 然后 hooks api 从链表不同的元素上访问对应的数据来完成各自的逻辑 。 这个上下文可以是 vdom、fiber 甚至是全局变量 。
不过 hooks 这个思想还是挺火的 , 淘宝出的服务端框架 midway 就在引入了 hooks 的思想:
midway 如何实现 hooksmidway 是一个 Node.js 框架:

react如何实现hooks?必须依赖 Fiber 么?

文章插图

服务端框架自然就没有 vdom、fiber 这种结构 , 不过 hooks 的思想并不依赖这些 , 实现 hooks 的 api 只需要在某个上下文放一个链表就行 。
midway 就实现了类似 react hooks 的 api:
react如何实现hooks?必须依赖 Fiber 么?

文章插图

react如何实现hooks?必须依赖 Fiber 么?

文章插图

具体它这个 hook 链表存在哪我还没看 , 不过我们已经掌握 hooks 的实现原理了 , 只要有个上下文存放 hook 链表就行 , 在哪都可以 。
总结react hooks 是在 react fiber 架构之后出现的特性 , 很多人误以为 hooks 必须配合 fiber 才能实现 , 我们分别看了 react、preact、react ssr、midway 中的 hooks 的实现 , 发现并不是这样的:
    react 是把 vdom 转成 fiber , 然后把 hook 链表存放到了 fiber.memorizedState 属性上 , 通过 next 串联preact 没有实现 fiber , 它是把 hook 链表放到了 vnode._component._hooks 属性上 , 数组实现的 , 通过下标访问react ssr 时不需要 fiber , 但是也没有把 hook 链表挂到 vdom 上 , 而是直接放在了一个全局变量上 , 因为只需要渲染一次 , 渲染完一个组件就清空这个全局变量就行midway 是一个 Node.js 框架 , 它也实现了 hooks 类似的 api , 具体放在哪我们没深入 , 但是只要有个上下文存放 hook 链表就行
所以 , react hooks 必须依赖 fiber 才能实现么?
明显不是 , 搭配 fiber、搭配 vdom、搭配全局变量 , 甚至任何一个上下文都可以 。
更多编程相关知识 , 请访问:编程视频!!
以上就是react如何实现hooks?必须依赖 Fiber 么?的详细内容 , 更多请关注电脑自学网其它相关文章!

推荐阅读