【问题标题】:'LikeView' has no propType 'RCTFBLikeView.onLayout' of native type 'boolean' if you haven't changed this'LikeView' 没有原生类型 'boolean' 的 propType 'RCTFBLikeView.onLayout' 如果你没有改变它
【发布时间】:2017-05-23 23:41:24
【问题描述】:

LikeView 没有原生类型 boolean 的原生 prop RCTFBLikeView.onLayout 的 propType 如果您自己没有更改此道具,这通常意味着您的本机代码和 JavaScript 代码版本不同步。更新两者应该会使此错误消失。

不知道为什么我会收到此错误。我根本没有在 android 应用程序中使用 LikeView。我试过运行npm start --reset-cache

iOS 版本的应用程序运行也没有问题。这仅适用于 android。

欢迎提出任何建议。

谢谢!

【问题讨论】:

  • 试试react-native-git-upgrade 看看它是否会更新你的安卓代码。
  • 在升级过程中出现这些错误:npm WARN react-addons-pure-render-mixin@15.0.2 需要 react@^15.0.2 的对等体,但没有安装。 npm WARN react-static-container@1.0.1 需要一个 react@^0.13.0 || ^0.14.0 || ^15.0.0 但没有安装。 npm WARN react-test-renderer@15.4.1 需要 react@^15.4.1 的对等点,但没有安装。
  • 嗯,从 0.41.2 升级也破坏了 iOS 方面:/...
  • hmm 试试react-native-git-upgrade 0.41.2 并确保当你npm install 时 0.41.2 在你的 package.json 中
  • 仍然得到同样的错误......但谢谢!还有其他建议吗??

标签: android react-native react-native-android fbsdk react-native-fbsdk


【解决方案1】:

我发现问题是(正如 RN 指出的那样)每个视图使用的 props 上的原生 props 和 JS 的不匹配。即:

  • renderToHardwareTextureAndroid
  • onLayout
  • 可访问性LiveRegion
  • 可访问性组件类型
  • importantForAccessibility
  • 可访问性标签
  • 测试ID

由于我没有使用包使用的任何视图,即:

  • FBLikeView
  • FBLoginButton
  • FBSendButton
  • FBShareButton

我尝试将此道具设置为“仅限本机”,这样它们就不会绑定到 JavaScript 端。在每个组件中(在示例中,FBShareButton.js),我替换了:

const RCTFBShareButton = requireNativeComponent(
    'RCTFBShareButton',
    ShareButton,
);

const RCTFBShareButton = requireNativeComponent(
  'RCTFBShareButton',
  ShareButton,
  {
    nativeOnly: {
      onChange: true,
      onLayout: true,
      testID: true,
      importantForAccessibility: true,
      accessibilityLiveRegion: true,
      accessibilityComponentType: true,
      accessibilityLabel: true,
      renderToHardwareTextureAndroid: true,
    }
  },
);

我现在将检查视图是否正确呈现并稍后编辑我的帖子,但如果您只是希望能够编译您的应用程序以继续开发(就像我目前的情况一样),这应该让你这样做。

编辑

我使用README 中的示例成功渲染了LoginButton 组件以及我的更改。

编辑 2

我对包的更改创建了pull request。我不喜欢这个解决方案,但它可能会引起 FB 的注意。与此同时,你可以用我的叉子。在您的package.json 中,只需将 fbsdk 行替换为:

"react-native-fbsdk": "git+https://github.com/motius/react-native-fbsdk.git#fix-views"

实际上,另一个pull request 可能是一个更好的解决方案。

【讨论】:

  • 谢谢你。也解决了我的问题。
【解决方案2】:

与@martinarroyo 建议的解决方案类似,我认为这与本机代码和 js 代码之间未同步的一些组件有关。 如果你不使用这些组件,我没有在你使用它的每个 js 文件中添加 nativeOnly 属性,而是将 react-native-fbsdk index.js 中的导出注释如下:

//native components
// exports.LikeView = require('./FBLikeView');
// exports.LoginButton = require('./FBLoginButton');
// exports.SendButton = require('./FBSendButton');
// exports.ShareButton = require('./FBShareButton');

显然这只是一种解决方法,但应该可以帮助您解决该错误

【讨论】:

  • 这很好用!谢谢。只是一个小问题——对你来说触发这个问题的确切问题是什么?我的正在添加一个完全不相关的第三方定位模块。
【解决方案3】:

您可以将 react-native-fbsdk 降级到 0.5.1 以避免此问题,直到将修复程序合并到新版本中。

【讨论】:

    【解决方案4】:

    因此,经过无数次的实验并将我的头撞在桌子上,我认为解决方案是依赖项的版本控制。

    这是我尝试过的事情的列表,我认为解决问题的事情用 * 标记,因为我不能 100% 确定是否是这一步解决了问题。

    1. 删除 node_modules 文件夹并重新安装它。
    2. 按照@matt 的建议进行 react-native-git-upgrade
    3. 按照说明多次重新安装 react-native-fbsdk 并仔细检查代码。
    4. 将 buildToolsVersion 和 targetSdkVersion 更改为 25。 5**。最终运行react-native uninstall react-native-fbsdk,然后是react-native install react-native-fbsdk@0.5.0

    注意* 5 号在过去两天内一直在尝试……但现在它才起作用……所以我不知道是什么黑魔法导致它刚刚起作用……

    数字 5 的问题是,昨天之前 fbsdk 依赖版本是 0.5.0,而截至昨天,它已升级到 0.6.0。所以我不确定为什么即使我昨天也重新安装了它,但它并没有修复错误。

    如果对此更熟悉的人可以解释为什么会发生这种情况,我会倾向于学习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多