4

尝试学习 React Native 自定义 Native UI 组件。

// FridgeCameraViewManager.swift

import UIKit

@objc(FridgeCameraViewManager)
class FridgeCameraViewManager: RCTViewManager {

  override func view() -> UIView! {
    let label = UILabel()
    label.text = "Swift Component"
    label.textAlignment = .center
    return label
  }

  @objc static override func requiresMainQueueSetup() -> Bool {
    return false
  }
}

.

// FridgeCameraViewManager.h

#import <Foundation/Foundation.h>
#import "React/RCTViewManager.h"

@interface RCT_EXTERN_MODULE(FridgeCameraViewManager, RCTViewManager)


@end

.

// FridgeCameraView.js

import {requireNativeComponent} from 'react-native';
const FridgeCameraView = requireNativeComponent('FridgeCameraView', null);
export default FridgeCameraView;

当我尝试在 App.js 中的某处使用 FridgeCameraView 组件时,它仅在我使用 Xcode 构建和运行项目时才有效。否则,在更改某些内容时使用热重载,我得到“不变违规:试图注册两个同名的视图 FridgeCameraView”。

在此处输入图像描述

4

2 回答 2

0

不知何故,当我安装react-router-native. 我认为存在包冲突或我缺少的东西。希望这将是对将来遇到此错误的人的修复。如果有人知道这个奇怪错误背后的原因,我仍在等待解释。

于 2020-01-12T15:45:16.780 回答
0

(不是解决方案,但仍想贡献)

TL;博士

  1. 只需按下R终端即可刷新应用程序
  2. 自动热重载将注册FridgeCameraView两次,原因未知

对于那些想知道发生了什么的人,我们正在学习 React Native - iOS Native 组件并遵循教程:

React Native 中的 Swift - 终极指南第 1 部分:模块

React Native 中的 Swift - 终极指南第 2 部分:UI 组件

这是出错的第 2 部分 UI 组件。随着 React / React Native 的快速变化,原生组件上的这种可怕的资源很快就过时了。

我不小心需要重新安装我的 macOS 和 node_module,但无法摆脱错误。安装另一个包也不能解决问题。

我怀疑在 Swift -> Objective C -> React-JS 中的 React Native 桥接期间,React Native 将注册我们的自定义模块FridgeCameraView两次;但是需要在Objective C中期望才能更深入地研究这个问题。欢迎任何贡献!

于 2020-11-30T11:29:21.097 回答