如何删除“警告:已从React Native核心提取异步存储...'?

ifmq2ha2  于 2023-02-16  发布在  React
关注(0)|答案(9)|浏览(168)

我已经尝试了此屏幕截图中推荐的方法

通过在我从react-native导入async-storage的文件中使用这行代码import AsyncStorage from '../../../node_modules/@react-native-community/async-storage';,但此路径无法解析,即async-storage不存在于此目录中。我还尝试通过运行yarn add async-storage安装async-storage(即使它已经安装),但在前面提到的目录中没有出现任何内容

kjthegm6

kjthegm61#

有两种方法可以做到这一点。

  • 首先正确导入AsyncStorage。这将删除警告并修复问题。
  • 第二,抑制警告。这将只是隐藏警告,但会导致您的问题,一旦AsyncStorage已从react-native删除。我不会这样做,因为第一种方法实际上解决了问题。
    • 注意**如果您使用的依赖项使用AsyncStorage,但仍以旧方式从react-native导入它,则会收到此警告。**安装AsyncStorage不会修复此错误。**您需要查看依赖项的依赖项,以找出导致此错误的原因。

这意味着实际检查每个依赖项的代码,看看它们是否使用AsyncStorage。在节点模块或依赖项的Github上搜索通常就足够了,但要找到它可能需要一些时间。
一旦您发现是哪一个导致了它,您应该打开一个问题或创建一个PR,修复依赖关系的存储库。此时,您只能隐藏警告,直到它被修复。

安装异步存储

1.使用您最喜欢的软件包管理器npmyarn安装它
1.链接依赖项
1.使用依赖项
安装:选择您通常使用的方法

npm i @react-native-community/async-storage

yarn add @react-native-community/async-storage

链接依赖项(如果您使用的是0.60+,则可能不必执行此操作,因为它具有Autolinking

react-native link @react-native-community/async-storage

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

import AsyncStorage from '@react-native-community/async-storage';

您可以通过查看here了解更多信息

禁止显示警告。

以前您使用YellowBox来隐藏警告,现在它已更改为LogBox。

import { LogBox } from 'react-native';

然后可以添加以下内容

LogBox.ignoreLogs(['Warning: Async Storage has been extracted from react-native core']);

我通常在App.js中进行,所以很容易跟踪我隐藏了哪些。
它不会从控制台中删除警告,但会删除与错误相关的任何LogBox警告。但是,我不会在这种情况下这样做,因为有一个正确的修复方法,即正确安装依赖项。

世博会用户

目前世博会仍从react-native导入AsyncStorage,由于这个原因,你可能仍然会遇到警告。我相信它仍然是因为向后兼容的原因而以这种方式导入它。快速搜索Expo repo显示有许多使用它的示例,就像你看到的here一样。在这种情况下,你唯一的选择就是抑制警告。根据世博会的功能要求,它是currently in progress,所以希望它应该很快被添加到世博会。

博览会更新

截至2020年6月:@react-native-community/async-storage v1.11.0可以安装在Expo托管应用中。希望这将导致在依赖项转换为导入异步存储的新方式时出现较少的此类警告。

报告更新

现在有一个新的异步存储库,可在此处找到
https://github.com/react-native-async-storage/async-storage
查看文档以了解安装和链接说明
https://react-native-async-storage.github.io/async-storage/docs/install/

dpiehjr4

dpiehjr42#

如果问题的来源是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';

然后通过导出{auth}

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

export { auth };

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

5t7ly7z5

5t7ly7z53#

对我来说,这个问题是与@firebase。
节点模块/@firebase/应用程序/目录/索引.rn.cjs.js
按照上面Andrew的步骤,在vscode中我能够删除警告。
1.复制“异步存储”

  1. cmd + shift + f -然后将“异步存储”粘贴到搜索中
    1.点击搜索'...'下的三个点
    1.右键单击node_modules文件夹选择“复制路径”
    1.在vscode搜索中添加“要包含的文件”的路径
    1.找到一个原始(不正确的)AsyncStorage的import或require语句的例子,复制它。将它粘贴到搜索中,替换第一个搜索查询。
    找到所有导入后,为新版本正确安装AsyncStorage(如上所述),同时添加到pod,然后检查并替换所有导入
require('react-native').AsyncStorage; => require('@react-native-community/async-storage').AsyncStorage;

import AsyncStorage from 'react-native'; => import AsyncStorage from '@react-native-community/async-storage';

我用xcode做了一个干净的构建,然后一切都很好,没有更多的警告:-)

ki0zmccv

ki0zmccv4#

这似乎是一个持续存在的问题,在Firebase与React原生。
查看此主题:
https://github.com/firebase/firebase-js-sdk/issues/1847

1tuwyuhd

1tuwyuhd5#

我一直对这个类似的问题感到恼火,这里是我的warning message。我简单地解决了它:

  • 转到:“节点_模块/本机React/index. js”
  • 只需注解掉所有包含“AsyncStorage”的行
  • 然后它对我很有效。
flseospp

flseospp6#

将以下步骤记入@Rory:
注意:我们需要在node_modules中找到var reactNative = require('react-native')
注意:如果您不想执行以下步骤,只需导航到node_modules/@firebase/auth/dist/rn/index.js

  1. cmd + shift + f-然后将var reactNative = require('react-native')粘贴到搜索中
    1.点击搜索'...'下的三个点
    1.右键单击node_modules文件夹选择copy path
    1.在vscode搜索中添加files to include的路径
    然后在我们找到搜索的index.js中,执行以下替换:
// var reactNative = require('react-native');
var AsyncStorage = require('@react-native-community/async-storage');

// and further below

// var reactNativeLocalPersistence = getReactNativePersistence(reactNative.AsyncStorage);
var reactNativeLocalPersistence = getReactNativePersistence(AsyncStorage);

刷新后警告消失!

enyaitl3

enyaitl37#

如果你使用npm

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

Yarn

yarn add @react-native-async-storage/async-storage
db2dz4w8

db2dz4w88#

YellowBox已替换为LogBox。您可以改用LogBox.ignoreLogs()来取消显示警告

hwazgwia

hwazgwia9#

在我的例子中,firebase使用react native的asyn存储,我使用的是v8 firebase,它没有getreactnativePersistence。
所以我有了这个解决方案,可能会有帮助。

将以下代码片段保存在一个文件ignoreWarning.js中,并导入文件顶部的App.js中。

import { LogBox } from "react-native";

const ignoreWarns = [
    "AsyncStorage has been extracted from react-native",
];

const warn = console.warn;

console.warn = (...arg) => {

    for (const warning of ignoreWarns) {
        if (arg[0].startsWith(warning)) {
            return;
        }
    }
    warn(...arg);
};

LogBox.ignoreLogs(ignoreWarns);

相关问题