我们正在尝试实现一个原生 UI 组件,该组件包装了一个 Android 组件,该组件可获取数据并使用我们现有的渲染框架(使用 )显示数据AdapterView。我们事先不知道数据是什么,所以这个组件的高度和内容是完全任意的。除了渲染组件异步请求其他内容(例如图像)的情况之外,这通常工作得很好。在这种情况下,图像被检索,图像ImageView被“显示”,但 UI 最终什么也没有显示(字面意思似乎是适当大小的透明视图)。
我们知道这些视图在普通 Android 中工作得很好,但我们似乎缺少一些东西来告诉 RN/Yoga 当从服务器加载图像时它应该重新渲染,以便它们正确显示。或多或少是这样的:
public class ReactServerListComponent extends SimpleViewManager<LinearLayoutExtension> {
private static final String REACT_CLASS = "TAReactServerListComponent";
@Override
public String getName() {
return REACT_CLASS;
}
...
@ReactProp(name = "link")
public void setLink(final LinearLayoutExtension view, String theNewLink){
//async loader logic invokes this on success
view.loadRetrievedEntries(newEntries);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在本例中,LinearLayoutExtension包含适配器生成的所有视图,而适配器又将包含异步加载的图像视图。
我们尝试了一些事情,例如返回ShadowNode带有测量函数的 a ,或者保留 a 的引用并对其进行ShadowNode调用等。dirty()
这样做的正确方法是什么?不幸的是,我们还没有找到处理“检查存储库”之外的真正复杂组件的文档或示例......
android-layout react-native react-native-native-ui-component
尝试学习 React 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
}
}
Run Code Online (Sandbox Code Playgroud)
。
// FridgeCameraViewManager.h
#import <Foundation/Foundation.h>
#import "React/RCTViewManager.h"
@interface RCT_EXTERN_MODULE(FridgeCameraViewManager, RCTViewManager)
@end
Run Code Online (Sandbox Code Playgroud)
。
// FridgeCameraView.js
import {requireNativeComponent} from 'react-native';
const FridgeCameraView = requireNativeComponent('FridgeCameraView', null);
export default FridgeCameraView;
Run Code Online (Sandbox Code Playgroud)
当我尝试在 App.js 中的某处使用 FridgeCameraView 组件时,它仅在我使用 Xcode 构建并运行项目时才有效。否则,在更改某些内容时使用热重载,我会收到“不变违规:尝试注册两个具有相同名称的视图 …
ios react-native react-native-ios react-native-native-ui-component
我很清楚,对于本机本机模块,我们可以使用它@ReactMethod来导出一个方法并从JSX调用它,但是我们如何在react-native本机UI组件中做同样的事情呢?
在文档中我只看到@ReactProp被提及.如果@ReactMethod不起作用,如何从JSX访问我的本机UI组件的属性呢?(在iOS上,这可以在原生ui组件RCT_EXPORT_METHOD上完成,但在Android上是类似的可能吗?)
谢谢.
react-native react-native-android react-native-native-module react-native-native-ui-component