rad*_*aei 2 javascript reactjs react-hooks
最近我开始阅读 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);
}
}
Run Code Online (Sandbox Code Playgroud)
调度程序是一个由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;
}
Run Code Online (Sandbox Code Playgroud)
ReactCurrentDispatcher 是一个具有一个名为 的属性的对象current。
var ReactCurrentDispatcher = {
/**
* @internal
* @type {ReactComponent}
*/
current: null
};
Run Code Online (Sandbox Code Playgroud)
现在我的问题是 React 如何以及在哪里处理 hooks 的逻辑?useImperativeHandle 或 ... 的逻辑在哪里?
一般来说,为了回答这样的问题,我克隆存储库并使用agor git grep:
(react) $ git grep useImperativeHandle\n[...]\npackages/react-reconciler/src/ReactFiberHooks.new.js: useImperativeHandle<T>(\n[...]\nRun Code Online (Sandbox Code Playgroud)\n这让我找到了这些映射,例如 \xe2\x80\x93 的代码useImperativeHandle,似乎是 这三个函数。
了解它们如何工作以及如何与 React 纤维系统交互是另一个难题。
\n| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |