美文网首页
react-reconsiler模块 - React源码解析(四

react-reconsiler模块 - React源码解析(四

作者: 请叫我Pro大叔 | 来源:发表于2020-05-18 21:12 被阅读0次

    React Hooks
    React到目前为止已经内置了15种钩子:

    • useState
    • useReducer
    • useContext
    • useRef
    • useEffect
    • useLayoutEffect
    • useCallback
    • useMemo
    • useImperativeHandle
    • useDebugValue
    • useResponder
    • useDeferredValue
    • useTransition
    • useMutableSource
    • useOpaqueIdentifier

    当然,比较常用的还是那几个:useState、useContext、useRef、useCallback、useMemo、useImperativeHandle、useReducer(其实这个我不怎么用的,主要是框架中已经集成了Redux啦,没有集成Redux的项目建议用用)。

    前面,我们已经知道Hook是在renderWithHooks函数中被处理的。其实呢,React处理Hooks是分不同时期的,这就在src/ReactFiberHooks.js中定义了四种Dispatcher(当然这是除去Dev那几种重复的之外啦):

    • ContextOnlyDispatcher,这个时期只能readContext,其他的都会爆出异常
    • HooksDispatcherOnMount,这个是在组件挂载阶段,其实也就是组件第一次执行到Hook时使用的。
    • HooksDispatcherOnUpdate,这个是在完成第一次Hook执行之后,使用的方法。
    • HooksDispatcherOnRerender,这个好像是在render期间触发的hooks执行。
      所以呢,我们在使用useState(或其他钩子函数)的时候其实第一次执行的逻辑和后面执行的逻辑可能是不一样的。就比如下面的代码:
    const Todo = () => {
      const [title, setTitle] = useState(null)
      ...
    }
    

    同一个Todo实例,在第一次执行时执行的是一个叫rerenderState函数的代码,而组件更新的时候执行的是updateState的代码。

    相关文章

      网友评论

          本文标题:react-reconsiler模块 - React源码解析(四

          本文链接:https://www.haomeiwen.com/subject/qtnpohtx.html