今天终于成功使用 React Native 打包 APK 成功,
IOS 暂时没有 开发者账号
所以先弄 Android
.
组件第一个遇到的就是 ListView
, 实在有些看不太明白加之人懒
,
所以前来请教经验
在很多ListView
的例子中都有这样一个属性rowHasChanged
按理说他应该是布尔值
(在后面可以看到它却显示为s1
)
以下是我做的测试代码如下
class Yes extends Component {
constructor(){
super();
var ds = new ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
this.state = {
dataSource: ds.cloneWithRows(['row 1', 'row 2']),
}
}
componentDidMount(){
var that = this;
setTimeout(()=>{
that.setState({
dataSource: this.state.dataSource.cloneWithRows(['row 1', 'row 2','row 3'])
});
},1000);
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData,rowHasChanged) => <Text>{rowData +':'+ rowHasChanged}</Text>}
/>
);
}
}
我不知道他有什么作用, 我尝试将 !===
改为 ===
, 对例子完全没有影响.
然后我尝试将他显示出来
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData,rowHasChanged) => <Text>{rowData +':'+ rowHasChanged}</Text>}
/>
结果为
row1:s1
row2:s1
1秒后变为由于`setTimeout(...)`,
row1:s1
row2:s1
row3:s1
将rowHasChanged: (r1, r2) => r1 !== r2
中的!==
改为 ===
没有任何影响, 那么这个rowHasChanged
是做什么的呢,它是ListView
它是一个用来控制组件的属性吗?
另外想请教如何学习 react-native 的相关组件,总觉得官方文档看起来生涩.
顺便再问一下:
setTimeout()
我为了访问当前 this
在外面使用了 that
存储,
在ES2015
中有没有什么方法避免使用that
_this
这样的变量
一共三个问题:
rowHasChanged
是什么学习 react native component 的技巧(例如是否有必要从
Android
了解?)ES6 中 避免使用
that
_this
bind
的方法
rowHasChanged是 react组件纪录 state 是否更新的一个方法,你修改 等于和不等于并不影响你第一次显示,影响的是你state变化以后的显示情况。
如果是等于,state变化 页面不更新 , state不变,才更新(一般不用)。不等于就是 state变化 页面立即更新。
至于你输出s1,是react将数据封装成了新对象,key叫s1
2.了解当然最好,不了解也是不影响开发的,除非你要做自定义组件