要与Android通信到ReactNative,我使用RCTEventEmitter
。使用这个,我需要将数组解析到RN端,并且这个数组应该设置在WritableMap
对象上。在WritableMap
对象上可以放置Array,如下所示,
void putArray(@NonNull String key, @Nullable ReadableArray value);
如何创建数据并将其添加到ReadableArray
中?
我认为您正在寻找WritableArray。你可以创建这样一个:
// Initialize an empty array
WritableArray array = new WritableNativeArray();
// Add items to array using its push methods, for example
array.pushString("test");
Arguments
有一个助手方法Arguments.fromList(list)
,它返回一个WritableArray
,它是ReadableArray
的子类,因此满足条件并准备传递给putArray
。
例如,将列表作为数组属性推送到JS事件:
Kotlin:
import com.facebook.react.bridge.Arguments
// ...
val params = Arguments.createMap().apply {
putArray("data", Arguments.fromList(someList))
// ...put more params
}
Java:
import com.facebook.react.bridge.Arguments;
// ...
WriteableArray array = Arguments.fromList(someList);
WritableMap params = Arguments.createMap();
params.putArray(array);
// ...put more params
将这些传递给.emit("SomeEvent", params)
,JS应接收{ data: [...someList] }
。
还有Arguments.makeNativeArray(list)
,它具有与.fromList
几乎相同的API和实现-两者都通过迭代列表arg来创建WritableArray
,按类型推送每个项。我能看到的唯一区别是:
.fromList
显式处理嵌套数组.makeNativeArray
显式处理null
(返回空数组(