为什么这种情况state改变不刷新页面?

先说背景:页面上是一个巨大的flatlist,里面有3个item,我在第三个item内部的最下面也就是整个外层flatlist的最下面有一个flatlist,这个flatlist加载的是state中的数据,需要做上拉加载功能,因为内部的flatlist拿不到下拉事件,所以我在最外层写了上拉加载的方法,获取到数据放到state中,这样就改变了里面的数据。但是,虽然state变了,页面却没刷新。后台打印确定state改变了
上个简要的代码
constructor(props){
super(props)
this.state={
data:[{"key":1},{"key":2},{"key":3}],
}
this._changeData=this._changeData.bind(this);
}
_changeData(){
this.setState({
data:[{"key":1},{"key":2},{"key":3},{"key":4},{"key":5}],
})
}
_renderItem=({item})=>{
switch(item.key){
case1:
return(
1111
);
case2:
return(
ke2222y2
);
case3:
return(
//这个flatlist需要做上拉加载
data={this.state.data}
renderItem={({item})=>{item.key}}
/>
)
}
}
render(){
const{navigate}=this.props.navigation;
letuser={'name':'zy',age:18}
return(
navigate('Two',{user:user})}>Home
data={[{"key":1},{"key":2},{"key":3}]}
renderItem={this._renderItem}
onEndReached={this._changeData}
onEndReachedThreshold={0.3}
/>
navigate('Two',{user:user})}>Home
)
}
我写的这个demo是可以实现的但是白天在项目里,那个数据是从网络获取过来的一个数组我用一个新的数组a把state里的数组放进去,再把拿过来的数组也放进去,最后把这个数组a赋值给state但发现并没有变化,页面没有刷新
一只甜甜圈
浏览 1542回答 2
2回答

当年话下

已经解决了发现是flatlist的为问题文档上有这样一句话:给FlatList指定extraData={this.state}属性,是为了保证state.selected变化时,能够正确触发FlatList的更新。如果不指定此属性,则FlatList不会触发更新,因为它是一个PureComponent,其props在===比较中没有变化则不会触发更新。加了这个属性之后就可以了

侃侃无极

你只能通过setState去触发render。this.setState({data:anotherData})不能通过直接赋值去触发this.state.data=anotherData虽然不知道你真正实现是怎样的,但我估计你用了后者这种方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript