加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解决react native ListView.DataSource 改变数组项属性视图不刷

发布时间:2020-12-15 06:35:13 所属栏目:百科 来源:网络整理
导读:当我们使用react native的ListView.DataSource来提供高性能的数据处理和访问。可是当我们改变已存在数组项的属性时,会发现视图并不会如你希望的那样更新,类似代码如下 export default class extends Component { dataSource = [ {foo: 'bar',active: false

当我们使用react native的ListView.DataSource来提供高性能的数据处理和访问。可是当我们改变已存在数组项的属性时,会发现视图并不会如你希望的那样更新,类似代码如下

export default class extends Component {
    dataSource = [
        {foo: 'bar',active: false},{foo: 'zoo',active: false}
    ]
    ds = new ListView.DataSource({ rowHasChanged: (r1,r2) => r1 !== r2 }))
    constructor(props) {
        this.state = {
            lists: this.ds.cloneWithRows(this.dataSource)
        }
    ......

当我们修改dataSource[0].active = true,并setState,结果发现我们的视图并没有如期改变。在网上找了一圈,说粗暴的替换整个dataSource之类的,结果发现根本木有效果,r1还是老老实实的等于r2,原因的话等我看看源码在过来写一下。
我的解决办法是,只替换被改动的数组项,并且暂时不更新dataSource,当setState(并非同步)完成后再更新,代码如下:

let temp = this.dataSource.map(row => row.foo === 'bar' ? Object.assign({},row,{active: true} : row))
this.setState({lists: this.ds.cloneWithRows(temp)},()=>{this.dataSource = temp})

不当之处请指正,谢谢

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读