如何在Realm数据更改时更新React Native ListView

ami*_*rfl 5 realm react-native

我有一个存储在Realm DB中的"Activity"对象列表,它们显示在ListView上.最初加载数据并在屏幕上显示数据没有问题.但是,当数据更新时(在另一个屏幕中,我们称之为'详细编辑屏幕')并且用户返回列表屏幕,列表不会更新.

我尝试在render方法中设置setState,但是返回一个空白屏幕.

    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>

)
...
}
Run Code Online (Sandbox Code Playgroud)

小智 4

我和你有同样的问题。我的问题是通过使用 Realm ListView 解决的。我这样用

import { ListView } from 'realm/react-native';

class List extends Component {

  constructor(props) {
    super(props);
  }

  componentDidMount() {
    src = realm.objects('MyObject');
    this.setState({
      dataSource:this.state.dataSource.cloneWithRows(src),
      data:src
    });
  } 

  updateData(){
   // update or add object in Realm
   this.setState({
     dataSource:this.state.dataSource.cloneWithRows(this.state.data)
   });
  } 

  render(){
    return( 
        <ListView
          dataSource={this.state.dataSource}
          renderRow=... />
  }
}
Run Code Online (Sandbox Code Playgroud)