5a2e8dfcf8
CI / verify (pull_request) Has been cancelled
Vite was bundling plugin-framework-react runtime twice, so tab pages crashed with useContext is not a function on enter/switch. Co-authored-by: Cursor <cursoragent@cursor.com>
70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
/**
|
||
* H5:Taro Vite 偶发把 @tarojs/plugin-framework-react/dist/runtime 打成两份,
|
||
* 导致 createReactApp 初始化了 B 份 reactMeta,而 Taro.useDidShow 仍绑定 A 份(R={}),
|
||
* 页面一进就报 n.useContext is not a function。
|
||
*
|
||
* 在 App 渲染前,用与 createReactApp 同一份 runtime 的 hooks 覆盖到 Taro 上。
|
||
*/
|
||
import Taro from '@tarojs/taro';
|
||
import {
|
||
useAddToFavorites,
|
||
useDidHide,
|
||
useDidShow,
|
||
useError,
|
||
useKeyboardHeight,
|
||
useLaunch,
|
||
useLoad,
|
||
useOptionMenuClick,
|
||
usePageNotFound,
|
||
usePageScroll,
|
||
usePullDownRefresh,
|
||
usePullIntercept,
|
||
useReachBottom,
|
||
useReady,
|
||
useResize,
|
||
useRouter,
|
||
useSaveExitState,
|
||
useScope,
|
||
useShareAppMessage,
|
||
useShareTimeline,
|
||
useTabItemTap,
|
||
useTitleClick,
|
||
useUnhandledRejection,
|
||
useUnload,
|
||
} from '@tarojs/plugin-framework-react/dist/runtime';
|
||
|
||
const HOOKS = {
|
||
useAddToFavorites,
|
||
useDidHide,
|
||
useDidShow,
|
||
useError,
|
||
useKeyboardHeight,
|
||
useLaunch,
|
||
useLoad,
|
||
useOptionMenuClick,
|
||
usePageNotFound,
|
||
usePageScroll,
|
||
usePullDownRefresh,
|
||
usePullIntercept,
|
||
useReachBottom,
|
||
useReady,
|
||
useResize,
|
||
useRouter,
|
||
useSaveExitState,
|
||
useScope,
|
||
useShareAppMessage,
|
||
useShareTimeline,
|
||
useTabItemTap,
|
||
useTitleClick,
|
||
useUnhandledRejection,
|
||
useUnload,
|
||
} as const;
|
||
|
||
export function patchTaroH5Hooks() {
|
||
if (process.env.TARO_ENV !== 'h5') return;
|
||
const target = Taro as unknown as Record<string, unknown>;
|
||
for (const [key, fn] of Object.entries(HOOKS)) {
|
||
target[key] = fn;
|
||
}
|
||
}
|