最近我開始閱讀 react hooks 代碼,我看到了這一點。
function useState(initialState) {
var dispatcher = resolveDispatcher();
return dispatcher.useState(initialState);
}
function useReducer(reducer, initialArg, init) {
var dispatcher = resolveDispatcher();
return dispatcher.useReducer(reducer, initialArg, init);
}
function useRef(initialValue) {
var dispatcher = resolveDispatcher();
return dispatcher.useRef(initialValue);
}
function useEffect(create, deps) {
var dispatcher = resolveDispatcher();
return dispatcher.useEffect(create, deps);
}
function useLayoutEffect(create, deps) {
var dispatcher = resolveDispatcher();
return dispatcher.useLayoutEffect(create, deps);
}
function useCallback(callback, deps) {
var dispatcher = resolveDispatcher();
return dispatcher.useCallback(callback, deps);
}
function useMemo(create, deps) {
var dispatcher = resolveDispatcher();
return dispatcher.useMemo(create, deps);
}
function useImperativeHandle(ref, create, deps) {
var dispatcher = resolveDispatcher();
return dispatcher.useImperativeHandle(ref, create, deps);
}
function useDebugValue(value, formatterFn) {
{
var dispatcher = resolveDispatcher();
return dispatcher.useDebugValue(value, formatterFn);
}
}
調度程式是一個由 resolveDispatcher() 初始化的物件。
function resolveDispatcher() {
var dispatcher = ReactCurrentDispatcher.current;
if (!(dispatcher !== null)) {
{
throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component..." );
}
}
return dispatcher;
}
而 ReactCurrentDispatcher 是一個物件,它有一個名為current.
var ReactCurrentDispatcher = {
/**
* @internal
* @type {ReactComponent}
*/
current: null
};
現在我的問題是 react 如何以及在哪里處理鉤子的邏輯?useImperativeHandle 或 ... 的邏輯在哪里?
uj5u.com熱心網友回復:
一般來說,要回答這樣的問題,我會克隆 repo 并使用agor git grep:
(react) $ git grep useImperativeHandle
[...]
packages/react-reconciler/src/ReactFiberHooks.new.js: useImperativeHandle<T>(
[...]
這讓我在這里找到了這些映射——useImperativeHandle例如,代碼似乎就是 這三個函式。
了解它們如何作業以及如何與 React 光纖系統互動是另一個兔子洞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/402040.html
標籤:javascript 反应 反应钩子
上一篇:如何在javascript中將每個專案存盤在localstorage中?
下一篇:處理bash腳本中的特殊字符
