【发布时间】:2016-05-30 15:17:30
【问题描述】:
我有一个存储在 Realm DB 中的“活动”对象列表,这些对象显示在 ListView 上。 最初加载数据并将其显示在屏幕上没有问题。但是,当数据更新(在另一个屏幕中,我们称之为“详细编辑屏幕”)并且用户返回列表屏幕时,列表不会更新。
我尝试在渲染方法中设置状态,但返回一个空白屏幕。
var activities = realm.objects('Activity').sorted('date');
let ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
...
module.exports = React.createClass({
getInitialState: function(){
return {
dataSource: ds.cloneWithRows(activities),
};
},
...
render: function(){
//update the list of activities
activities = realm.objects('Activity').sorted('date');
this.setState({dataSource: ds.cloneWithRows(activities)});
return (
<View>
{(!activities || activities.length<1) && noActivitiesMessage}
<ListView style={styles.listStyle} dataSource={this.state.dataSource}
renderRow={this._renderRow} />
</View>
)
...
}
【问题讨论】:
-
你是使用 Realm 的 ListView 还是 React Native 核心?
-
我都试过了。如果我尝试更新 render() 中的状态,如上所示,使用 Realm 的 ListView 会使应用程序崩溃。它显示错误:在现有状态转换期间无法更新(例如在
render或其他组件的构造函数中)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移动到componentWillMount。
标签: react-native realm