2015-08-03 56 views
1

我已创建一个ListView这样的:什么情况下会在ListView上触发`rowHasChanged`?

var data = [{id: 1, count: 1}, {id: 2, count: 1}]; 

var ds = new ListView.DataSource({ 
    rowHasChanged: function (row1, row2) { 
     console.log('changed'); 
     return true; 
    } 
}); 
var ListViewExample = React.createClass({ 
    getInitialState: function() { 
     return { 
      dataSource: ds.cloneWithRows(data) 
     } 
    },  
    componentDidMount: function() { 
     setTimeout(()=>{ 
      console.log('changing...'); 
      data[0].count += 1; 
      this.setState({ 
       dataSource: ds.cloneWithRows(data) 
      }); 
     },3000); 
    }, 
    render: function() { 
     console.log('render') 
     return (
     <ListView 
      initialListSize={3} 
      dataSource={this.state.dataSource} 
      renderRow={(rowData) => <Text>{rowData.id}:{rowData.count}</Text>} 
     /> 
    ); 
    } 
}); 

运行这段代码和日志显示:

[tid:com.facebook.React.JavaScript] 'Running application "mytest" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF' 
2015-08-03 20:40:10.385 [info][tid:com.facebook.React.JavaScript] 'render' 
2015-08-03 20:40:13.396 [info][tid:com.facebook.React.JavaScript] 'changing...' 
2015-08-03 20:40:13.398 [info][tid:com.facebook.React.JavaScript] 'render' 

当数据发生变化时,有观点也发生了变化。

但为什么rowHasChanged没有被触发? (再也看不到日志changed

+1

我相信你正在检查文档中的例子。你的代码与[文档](https://facebook.github.io/react-native/docs/listview.html)中的代码不同。我认为文档中的所有内容都有很好的解释。 – knowbody

回答

1

也许你应该在这个看一看:

https://stackoverflow.com/a/33871118/813675

答案短,改变

this.setState({ 
    dataSource: ds.cloneWithRows(data) 
}); 

this.setState({ 
    dataSource: this.state.dataSource.cloneWithRows(data) 
}); 

愿望这种帮助。

相关问题