diff --git a/package.json b/package.json index ccbde3e..0718b66 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-update", - "version": "10.35.7", + "version": "10.35.8", "description": "react-native hot update", "main": "src/index", "scripts": { diff --git a/src/context.ts b/src/context.ts index 566ec63..8fbf5e9 100644 --- a/src/context.ts +++ b/src/context.ts @@ -1,6 +1,7 @@ import { createContext, useContext } from 'react'; import { CheckResult, ProgressData } from './type'; import { Pushy, Cresc } from './client'; +import i18n from './i18n'; const noop = () => {}; const asyncNoop = () => Promise.resolve(); @@ -50,7 +51,16 @@ export const UpdateContext = createContext<{ lastError?: Error; }>(defaultContext); -export const useUpdate = () => useContext(UpdateContext); +export const useUpdate = __DEV__ ? () => { + const context = useContext(UpdateContext); + + // 检查是否在 UpdateProvider 内部使用 + if (!context.client) { + throw new Error(i18n.t('error_use_update_outside_provider')); + } + + return context; +} : () => useContext(UpdateContext); /** @deprecated Please use `useUpdate` instead */ export const usePushy = useUpdate; diff --git a/src/locales/en.ts b/src/locales/en.ts index e97d0d3..75a368d 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -71,4 +71,8 @@ export default { // Development environment messages dev_incremental_update_disabled: 'Currently in development environment, incremental hot update cannot be executed and restart will not take effect. If you need to test effective full hot update in development environment (but will reconnect to metro after restart), please enable "ignore timestamp" switch and retry.', + + // Context error messages + error_use_update_outside_provider: + 'useUpdate must be used within an UpdateProvider. Please wrap your component tree with .', }; diff --git a/src/locales/zh.ts b/src/locales/zh.ts index efe005c..5c04061 100644 --- a/src/locales/zh.ts +++ b/src/locales/zh.ts @@ -68,4 +68,8 @@ export default { // Development environment messages dev_incremental_update_disabled: '当前是开发环境,无法执行增量式热更新,重启不会生效。如果需要在开发环境中测试可生效的全量热更新(但也会在再次重启后重新连接 metro),请打开"忽略时间戳"开关再重试。', + + // Context error messages + error_use_update_outside_provider: + 'useUpdate 必须在 UpdateProvider 内部使用。请使用 包裹您的组件树。', };