如何删除“警告:异步存储已从react-native核心中提取出来...”?

nad*_*ani 23 react-native

我已经尝试过此屏幕截图中的建议

截图20190323-081232.png

通过import AsyncStorage from '../../../node_modules/@react-native-community/async-storage';在我async-storage要从中导入的文件中使用此行代码 ,react-native 但此路径尚未解析,即async-storage该目录中不存在。我还尝试async-storage通过运行进行安装(即使已经安装了)yarn add async-storage,但是在前面提到的目录中没有任何显示

And*_*rew 30

有两种方法可以执行此操作。

  • 首先AsyncStorage正确导入。这将删除警告并解决问题。
  • 其次,抑制警告。AsyncStorage从中删除警告只会掩盖警告,但是会引起您的问题react-native。我会这样做,因为第一种实际解决问题的方法。

请注意,如果您使用的是使用AsyncStorage的依赖项,并且仍以旧方法从react-native导入它,则会收到此警告。安装AsyncStorage无法解决该错误。您将需要查看依赖项的依赖项,以找出导致它的原因。

这意味着实际上要遍历每个依赖项的代码以查看它们是否使用AsyncStorage。通常,在节点模块或依赖项的Github上进行搜索就足够了,但是可能需要一些时间才能找到它。

一旦找到导致问题的原因,就应该打开一个问题或创建一个PR,并对该依赖的仓库进行修复。在这一点上,抑制警告是您可以做的,直到它解决。

安装AsyncStorage

  1. 使用您喜欢的软件包管理器安装它,npmyarn
  2. 链接依赖
  3. 使用依赖

安装:选择通常使用的方法

npm i @react-native-community/async-storage
Run Code Online (Sandbox Code Playgroud)

要么

yarn add @react-native-community/async-storage
Run Code Online (Sandbox Code Playgroud)

链接依赖项(如果您使用的是0.60+,则可能不必这样做,因为它具有自动链接功能

react-native link @react-native-community/async-storage
Run Code Online (Sandbox Code Playgroud)

然后像这样导入它,并像以前一样使用它。

import AsyncStorage from '@react-native-community/async-storage';
Run Code Online (Sandbox Code Playgroud)

您可以在这里查看更多信息

停止警告。

您可以使用以下命令来阻止YellowBox警告

import {YellowBox} from 'react-native';
Run Code Online (Sandbox Code Playgroud)

然后您可以添加以下内容

YellowBox.ignoreWarnings(['Warning: Async Storage has been extracted from react-native core']);
Run Code Online (Sandbox Code Playgroud)

我通常会这样做,App.js因此很容易跟踪我隐藏了哪些人。

它不会从您的控制台中删除该警告,但会删除与该错误相关的所有YellowBox警告。但是,我不会在这种情况下执行此操作,因为有一个正确的修复程序是正确安装依赖项。

  • 绝对不要将其放在您的`render`方法中!`YellowBox.ignoreWarnings`对集合进行了很多迭代,将其放入`render`是一个糟糕的主意(`render`太热了!)。您只希望它执行一次,我可能会将其放在componentDidMount中,或者将其包装在lodash.once中。 (3认同)
  • 是的,我最终发现我使用了“react-native-elements”,它依赖于“react-native- ratings”,而“react-native- ratings”以“expo”作为依赖项。不幸的是,最新版本的“expo”仍然依赖于从“react-native”导入AsyncStorage,您可以在此处看到:https://github.com/expo/expo/blob/master/packages/expo/src/通知/Notification.ts (2认同)

Ess*_*sam 10

如果问题的根源是 Firebase,则从版本 9.9.2 开始,一个可行的解决方案是将 Firebase 用于在正确导入身份验证会话后将其存储为 AsyncStorage 的默认持久层设置为:

expo install @react-native-async-storage/async-storage

然后添加到 firebase.js

import AsyncStorage from '@react-native-async-storage/async-storage';
import { initializeAuth, getReactNativePersistence} from 'firebase/auth/react-native';
Run Code Online (Sandbox Code Playgroud)

然后通过导出 { auth }

const auth = initializeAuth(app, {
persistence: getReactNativePersistence(AsyncStorage)
});

export { auth };
Run Code Online (Sandbox Code Playgroud)

与 getAuth() 不同,initializeAuth() 使我们能够控制持久层。

参考


Llo*_*joo 5

这似乎是 Firebase 和 React Native 上持续存在的问题。

查看此线程:

https://github.com/firebase/firebase-js-sdk/issues/1847