我正在使用Expo创建一个React Native项目。我一直在使用常规的旧AsyncStorage
,从react-native
导入,一切都很好。
在查找如何模拟AsyncStorage
进行测试时,我发现react-native-community/react-native-async-storage
内置了自己的模拟。
因此,我使用yarn add
安装了社区插件,并关闭了所有导入语句。
当我运行我的应用程序时,我遇到了一个错误(我正在重新输入自己的名字,请原谅一些省略号):
[@RNC/AsyncStorage]: NativeModule: AsyncStorage is null.
To fix this issue try these steps:
-Run `react-native link @react-native-community/async-storage` in the project root.
-Rebuild and restart the app
-Run the packager with `--clearCache` flag.
-If you are using CocoaPods on iOS...
-If this happens while testing with Jest...
所以我尝试运行react-native link @react-native-community/async-storage
,但我不断收到此错误:
Something went wrong while linking. Error: Cannot read property 'pbxprojPath' of null
一些研究表明,Expo应用程序无法(也不需要)链接。
我尝试npm start --clearCache
无济于事。
此外,我的项目中没有ios
(或android
)文件夹。这一直让我感到困惑,因为我看到它遍及整个地方。我通过Expo应用程序在模拟器/仿真器(和设备)中运行我的应用程序。一旦我尝试弹出,便出现了问题。因此,我没有ios
文件夹。
(我将回到使用AsyncStorage
中的旧版本react-native
并自己创建一个模拟文件,但我想知道如何解决此问题以及可能会出现的类似问题未来。)
答案 0 :(得分:6)
可以通过链接上面提到的模块来纠正此错误,但是如果您的应用是 Expo Managed (通过以下方式创建),则 linking 不起作用expo-cli)。
假设您的应用由世博会管理, 而不是使用Facebook RN文档中的 AsyncStorage :
import AsyncStorage from '@react-native-community/async-storage';
要做:
import { AsyncStorage } from 'react-native';
在此处查看文档:{{3}}
答案 1 :(得分:2)
让我们试试 @react-native-async-storage/async-storage
如果仍然出错,我认为您将按照 this link
中的步骤进行操作cd ios/ && pod install
react-native link @react-native-async-storage/async-storage
。npm start --reset-cache
react-native run-ios
重新安装应用希望能帮到你。
答案 2 :(得分:2)
为我解决这个问题的是首先安装以下库:
expo install @react-native-async-storage/async-storage
然后,更新您的导入:
import AsyncStorage from '@react-native-async-storage/async-storage'
<块引用>
注意:您可能需要在此修复后重新启动 Expo。
答案 3 :(得分:1)
我遇到了同样的问题,原因是因为我正在使用react-native-navigation,它弄乱了MainApplication.java中的android部分,所以我不得不手动更改文件,我已经运行了以下命令: / p>
react-native链接@ react-native-community / async-storage
现在我有这个了
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(new MainReactPackage(),
new AsyncStoragePackage()); //<----- here
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
和这个:
protected List<ReactPackage> getPackages() {
// Add additional packages you require here
// No need to add RnnPackage and MainReactPackage
return Arrays.<ReactPackage>asList(
// eg. new VectorIconsPackage()
new AsyncStoragePackage()); //<----- here
}
答案 4 :(得分:1)
只需关闭Metro捆绑器并运行react-native run-android or run-ios
,它将被修复。
答案 5 :(得分:0)
我只是遇到了类似的问题,发现Krizzu在github上提供的答案非常有帮助。他说的是:“如果您使用的是博览会,则无法添加此软件包。使用任何博览会给您的东西(并忽略有关弃用的警告)。和“除非您退出项目,否则无法将其他本机模块添加到expo。”
您可以在以下主题中阅读有关此问题的更多信息: https://github.com/react-native-community/react-native-async-storage/issues/89和https://github.com/react-native-community/react-native-async-storage/issues/72。 我希望这会有所帮助。
答案 6 :(得分:0)
运行
react-native link @react-native-async-storage/async-storage
在使用“--reset-cache
”详细运行 Metro 并在新的 cmd 中运行“react-native run-android
”之后解决了我的问题
答案 7 :(得分:0)
再次运行项目试试
如果您使用的是 iOS 设备,则:
cd ios && pod install
npx react-native run-ios
如果还是不行,请尝试重新安装 npm 包并按照官方文档进行操作。
答案 8 :(得分:0)
如果您使用的是 react-native >=0.60,请尝试:
在第一个终端窗口中,启动服务器:
$ react-native start --reset-cache
在第二个终端窗口中,构建应用程序:
$ react-native run-android
答案 9 :(得分:0)
在 package.json 中创建的链接:
"@react-native-community/async-storage": "https://github.com/react-native-async-storage/async-storage",
答案 10 :(得分:-1)
在 node_modules/@react-native-async-storage/async-storage”/async-storage/src/AsyncStorage.native.js 中, 将 RCTAsyncStorage from './RCTAsyncStorage' 替换为 import RCTAsyncStorage from './RCTAsyncStorage.expo';