react-native – ListView.DataSource中rowHasChanged的确切输入
在本机示例中,它们为我们提供了以下代码:
getInitialState: function() { return { dataSource: new ListView.DataSource({ rowHasChanged: (row1,row2) => row1 !== row2,}),loaded: false,}; }, 但是,我似乎无法找到任何描述rowHasChanged功能的简明文档.我们从哪里得到两个输入,row1和row2?什么定义了ListView中的row1和row2? 我在这里查看了Listview的文档:
TL,DR;您必须定义与您为数据源提供的数据相关的rowHasChanged.
var ds = new ListView.DataSource({rowHasChanged: (r1,r2) => r1 !== r2}); return { dataSource: ds.cloneWithRows(['row 1','row 2']),}; 在此特定示例中,r1和r2将是一个字符串,因为ds有2个字符串行作为数据. 您可以根据此定义自己的数据格式并实现rowHasChanged.每次更改数据源行时,基本上都会为每个数据源行条目调用rowHasChanged,然后只重新呈现要更改的行(当rowHasChanged返回true时). 更高级的例子 假设我的DataSource中有这种数据: [ { type: DOG,age: 12,name: "Snoopy" },{ type: CAT,age: 13,name: "Oliver" },{ type: HUMAN,age: 30,firstName: "Jerome",lastName: "Garcia" } ] 在我的示例格式中,“type”是切换数据类型的必填字段,“age”是可用于所有类型的字段,然后是特定字段. 然后我可以实现rowHasChanged: const rowHasChanged = (r1,r2) => { if (r1.type !== r2.type) return true; if (r1.age !== r2.age) return true; switch (r1.type) { case DOG: case CAT: return r1.name !== r2.name; case HUMAN: return r1.firstName !== r2.firstName || r1.lastName !== r2.lastName; default: throw new Error("Unsupported type "+r1.type); } } ^那样,只有一行按照我的格式真正改变才会呈现. (你可以想象我的renderRow函数也是类型为开关的东西) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |