【问题标题】:Cannot read property 'DocumentDir' of undefined React-Native Firebase React-native-fetch-blob无法读取未定义的 React-Native Firebase React-native-fetch-blob 的属性“DocumentDir”
【发布时间】:2018-06-05 09:38:47
【问题描述】:

我已用尽互联网上的所有线程,但找不到解决方案。 我正在尝试使用 react-native-fetch-blob 从我的 react-native 应用程序将照片上传到 firebase。 运行 iphone 6 的 RN ios 模拟器。 不使用世博会 由于在不同的计算机上设置了 android env,我还没有尝试在 android 模拟器上运行。

此行导致错误。

import RNFetchBlob from 'react-native-fetch-blob'

我已经阅读了很多关于使用 react-native-fetch-blob 的教程。

我似乎无法正确链接它,或者请告诉我我的问题是什么。

"react": "16.0.0-beta.5",
"react-native": "0.49.3",
"react-native-fetch-blob": "^0.10.8",

我已经尝试过的...

npm install --save react-native-fetch-blob
react-native link 

...

npm install --save react-native-fetch-blob
react-native link react-native-fetch-blob

...

rm -rf node_modules, then reinstall, then clean and build

... 我已经按照 WIKI 手动链接包。已验证的包通过 SS 链接 ...

在所有这些场景之后清理和构建。

我不会列出我所做的所有事情,因为我已经在堆栈和 RNFB 问题/github 上尝试了所有内容。

这是来自 Xcode 的一些屏幕截图,RNFB 正在正确链接,或者至少我认为。

我找到了这个https://github.com/benjreinhart/react-native-aws3

并且将尝试通过 AWS 进行锻炼,直到有人可以帮助链接 fetch blob。等我有时间上班再更新。

【问题讨论】:

  • 我也有同样的问题,你解决了吗?

标签: javascript reactjs firebase react-native react-native-fetch-blob


【解决方案1】:

对于 2021 年的人们: 您很可能缺少一个名为 react-native-blob-util

的依赖项

【讨论】:

    【解决方案2】:

    只需将您的 rn-fetch-blob 版本更新为“0.10.15”,即可使用。

    【讨论】:

      【解决方案3】:

      只需杀死所有节点进程并启动 npm 服务器并运行应用程序:

      Step1:运行命令killall -9 node 对于 Windows 用户,运行 taskkill /im node.exe 如果进程仍然存在,请运行 taskkill /f /im node.exe

      第二步:运行命令npm start

      Step3:运行命令react-native run-ios OR react-native run-android

      【讨论】:

        【解决方案4】:

        我终于设法安装了react-native-fetch-blob 并通过以下方式摆脱了Cannot read property 'DocumentDir of undefined'

        1. 按照installation steps(我使用npm安装模块)。
        2. Linking the package manually

        我认为我之前遗漏的重要部分是为 iOS 运行 pod install。 对于 Android,它以前对我不起作用的原因可能与我在项目中使用 react-native-navigation 的事实有关,这意味着我的 MainApplication.java 与默认的不同。确保在 getPackages() 方法中列出并初始化了库。

        这是我的MainApplication.java 供参考:

        public class MainApplication extends NavigationApplication {
        
          @Override
          protected ReactGateway createReactGateway() {
            ReactNativeHost host = new NavigationReactNativeHost(this, isDebug(), createAdditionalReactPackages()) {
              @Override
              protected String getJSMainModuleName() {
                return "index";
              }
            };
            return new ReactGateway(this, isDebug(), host);
          }
        
          @Override
          public boolean isDebug() {
            return BuildConfig.DEBUG;
          }
        
          protected List<ReactPackage> getPackages() {
            // Add additional packages you require here
            // No need to add RnnPackage and MainReactPackage
            return Arrays.<ReactPackage>asList(
              new MapsPackage(),
              new RNFetchBlobPackage() 
            );
          }
        
          @Override
          public List<ReactPackage> createAdditionalReactPackages() {
            return getPackages();
          }
        
          @Override
          public void onCreate() {
            super.onCreate();
            Fabric.with(this, new Crashlytics());
            SoLoader.init(this, /* native exopackage */ false);
          }
        
        }

        希望这会有所帮助!

        【讨论】:

          【解决方案5】:

          我通过

          获得了对应用程序本地目录的访问权限
           RNFetchBlob.fs.dirs.SDCardApplicationDir
          

          您可以附加RNFetchBlob.fs.dirs.SDCardApplicationDir+"/files" 进入您的应用程序的文档目录。

          【讨论】:

            【解决方案6】:

            我正在清理我的项目并删除不再需要的包。

            我从我的项目中完全删除了 FBSDK 登录,现在不再出现错误。

            “我的代码有效。我不知道我的代码为什么有效”

            【讨论】:

              【解决方案7】:

              你在使用世博会吗?您必须删除 expo 并编辑您的 app.json 才能让您的应用再次运行。

              这里有一个解决方法:https://github.com/wkh237/react-native-fetch-blob/issues/299

              虽然我自己没有尝试过。我最终完全删除了世博会

              编辑:

              你能在你的 MainApplication.java 中试试这个吗:

               import com.RNFetchBlob.RNFetchBlobPackage;                                                                                 
               protected List<ReactPackage> getPackages() {
                    return Arrays.<ReactPackage>asList(
                        new MainReactPackage(),
                        new RNFetchBlobPackage()                                                                                         
                    );
                  }
                };
              

              来源:https://github.com/wkh237/react-native-fetch-blob/wiki/Manually-Link-Package

              【讨论】:

              • 它已经在那里了。一切都正确链接,我会上传一个SS。帖子中的最后一张图片。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-09-27
              • 2017-10-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-03-27
              • 2018-10-02
              相关资源
              最近更新 更多