猿问

React-Native Listview 的各个属性解释?

今天终于成功使用ReactNative打包APK成功,
IOS暂时没有开发者账号所以先弄Android.组件第一个遇到的就是ListView,实在有些看不太明白加之人懒,所以前来请教经验
在很多ListView的例子中都有这样一个属性rowHasChanged按理说他应该是布尔值(在后面可以看到它却显示为s1)以下是我做的测试代码如下
classYesextendsComponent{
constructor(){
super();
vards=newListView.DataSource({
rowHasChanged:(r1,r2)=>r1!==r2
});
this.state={
dataSource:ds.cloneWithRows(['row1','row2']),
}
}
componentDidMount(){
varthat=this;
setTimeout(()=>{
that.setState({
dataSource:this.state.dataSource.cloneWithRows(['row1','row2','row3'])
});
},1000);
}
render(){
return(
dataSource={this.state.dataSource}
renderRow={(rowData,rowHasChanged)=>{rowData+':'+rowHasChanged}}
/>
);
}
}
我不知道他有什么作用,我尝试将!===改为===,对例子完全没有影响.
然后我尝试将他显示出来
dataSource={this.state.dataSource}
renderRow={(rowData,rowHasChanged)=>{rowData+':'+rowHasChanged}}
/>
结果为
row1:s1row2:s1
1秒后变为由于`setTimeout(...)`,
row1:s1row2:s1row3:s1
将rowHasChanged:(r1,r2)=>r1!==r2中的!==改为===没有任何影响,那么这个rowHasChanged是做什么的呢,它是ListView它是一个用来控制组件的属性吗?
另外想请教如何学习react-native的相关组件,总觉得官方文档看起来生涩.
顺便再问一下:
setTimeout()我为了访问当前this在外面使用了that存储,在ES2015中有没有什么方法避免使用that_this这样的变量
一共三个问题:
rowHasChanged是什么
学习reactnativecomponent的技巧(例如是否有必要从Android了解?)
ES6中避免使用that_thisbind的方法
有好干货在手的请用力砸我
附录:ReactNative官方文档链接
月关宝盒
浏览 377回答 2
2回答

慕村9548890

rowHasChanged是react组件纪录state是否更新的一个方法,你修改等于和不等于并不影响你第一次显示,影响的是你state变化以后的显示情况。如果是等于,state变化页面不更新,state不变,才更新(一般不用)。不等于就是state变化页面立即更新。至于你输出s1,是react将数据封装成了新对象,key叫s12.了解当然最好,不了解也是不影响开发的,除非你要做自定义组件

动漫人物

@熊猫说的很清楚了。RN的文档不太细致,毕竟项目太活跃了,文档有点脱节,android部分更是。建议题主找几个开源项目直接上手,改一改,看到什么组件再查文档。结合问答社区,github的issues等学习。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答