为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2019-05-25 17:27:17
先说背景:页面上是一个巨大的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需要做上拉加载{item.key}}/>)}}render(){const{navigate}=this.props.navigation;letuser={'name':'zy',age:18}return(navigate('Two',{user:user})}>Homenavigate('Two',{user:user})}>Home)}我写的这个demo是可以实现的但是白天在项目里,那个数据是从网络获取过来的一个数组我用一个新的数组a把state里的数组放进去,再把拿过来的数组也放进去,最后把这个数组a赋值给state但发现并没有变化,页面没有刷新
查看完整描述

2 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

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

TA贡献2051条经验 获得超10个赞

你只能通过setState去触发render。
this.setState({
data:anotherData
})
不能通过直接赋值去触发
this.state.data=anotherData
虽然不知道你真正实现是怎样的,但我估计你用了后者这种方式。
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 1541 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信