我正在尝试创建一个反应原生的ListView,它呈现Realm返回的结果。我一直在遵循我发现的有关本机反应的ListView以及如何使用Realm的说明。
但是我总是得到同样的错误:Objects are not valid as a React child (found: [object Results]). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of 'Text'.
根据我对Realm文档和其他文章的理解,Results对象应该像javascript列表一样,因此应该被接受到cloneWithRows方法中。
如果有人可以告诉我我做错了什么或如何解决这个问题,我将不胜感激。
P.S。我尝试了本地反应原理的ListView和Realm的ListView,两者的行为方式相同。
import React, { Component } from 'react';
import {
StyleSheet,
View,
Text,
Navigator,
TouchableHighlight,
TouchableOpacity,
//ListView,
} from 'react-native';
import { ListView } from 'realm/react-native';
import realm from './myrealm'
class contextview extends Component {
getState() {
console.log("getInitialState");
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
let pictures = [ realm.objects('picture').filtered('new == true') ];
console.log("pictures: " + pictures);
return {
//dataSource: ds.cloneWithRows(['row 1', 'row 2', 'row 3']),
dataSource: ds.cloneWithRows(pictures)
};
}
constructor(props)
{
super(props);
this.state = this.getState();
this.bindMethods();
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
);
}
}
答案 0 :(得分:0)
调用cloneWithRows
时是否收到此错误?如果是这样,您可能需要在使用cloneWithRows
时在Realm.Results
对象的快照上调用Realm.ListView
。这是在Realm示例here中完成的。因此,或许可以尝试使用Realm.ListView
并将代码更改为:
let pictures = [ realm.objects('picture').filtered('new == true').snapshot() ];
答案 1 :(得分:0)
我找到了我的渲染方法中的原因,
而不是:
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
);
}
我应该做的:
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData.path}</Text>}
/>
);
}
由于rowData
是一个对象,因此ReactNative无法在Text元素中呈现它