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