You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Expo 53.0.9与React Native 0.79.2后,调用createSagaMiddleware()出现TypeError错误求助

升级Expo 53.0.9与React Native 0.79.2后,调用createSagaMiddleware()出现TypeError错误求助

看起来你遇到的问题是由于模块导入方式错误结合新版本Expo/React Native更严格的模块解析规则导致的,以下是针对性的解决方案:

1. 修正Redux-Saga的导入方式(最关键)

Redux-Saga的createSagaMiddleware是命名导出,而非默认导出。你当前使用的默认导入会获取到undefined,这就是调用时抛出TypeError: 0, _reduxSaga.default is not a function的根本原因。

修改你的导入语句:

// 错误写法
import createSagaMiddleware from 'redux-saga';

// 正确写法
import { createSagaMiddleware } from 'redux-saga';

2. 升级Redux-Saga到兼容版本

虽然你提到已经更新过Redux-Saga,但建议确保使用与Expo 53/React Native 0.79兼容的最新稳定版:

# 使用npm
npm install redux-saga@latest

# 或使用yarn
yarn add redux-saga@latest

3. 调整Metro配置(可选,若仍有问题)

Expo 53搭配的React Native 0.79对模块解析规则更严格,你可以在metro.config.js中添加以下配置以确保正确处理CommonJS/ES模块:

const { getDefaultConfig } = require('expo/metro-config');

const config = getDefaultConfig(__dirname);

config.resolver = {
  ...config.resolver,
  allowCommonJs: true, // 允许解析CommonJS模块
  sourceExts: [...config.resolver.sourceExts, 'cjs', 'mjs'], // 支持更多模块扩展名
};

module.exports = config;

4. 清除Expo/Metro缓存

旧的缓存可能导致模块解析异常,执行以下命令清除缓存并重启项目:

npx expo start -c

修改后的完整Redux配置代码示例

import AsyncStorage from '@react-native-async-storage/async-storage';
import { legacy_createStore as createStore, applyMiddleware } from 'redux';
import { persistStore, persistReducer } from 'redux-persist';
// 修正后的Redux-Saga导入
import { createSagaMiddleware } from 'redux-saga';
import logger from 'redux-logger';
import rootReducer from '@reducers';
import rootSagas from '@sagas';

/**
 * Redux Setting
 */
const persistConfig = {
  key: 'root',
  storage: AsyncStorage,
  blacklist: ['home', 'wishlist', 'list', 'messenger', 'notification'],
  timeout: 100000,
};

const sagaMiddleware = createSagaMiddleware();
let middleware = [sagaMiddleware];

if (process.env.NODE_ENV === `development`) {
  middleware.push(logger);
}

const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = createStore(persistedReducer, applyMiddleware(...middleware));

sagaMiddleware.run(rootSagas);
const persistor = persistStore(store);

export { store, persistor };

补充说明

在旧版本Expo/React Native中,Metro或Babel的模块解析规则相对宽松,可能允许错误的导入方式(比如将命名导出当作默认导出),但新版本收紧了规则,导致原本隐藏的导入错误直接暴露出来。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 10:59:34