收藏
回答

哪位大佬帮我找找原因?

 

 

   let list = this.data.list;

    let index = e.currentTarget.dataset.index;
    list[index].num = list[index].num + 1;

    this.setData({ is_edit:false})


   

     我setData了一个无关的值,list数组也跟着setData了,但是list在页面的数据没更新,不想list被setData



最后一次编辑于  2019-08-08
回答关注问题邀请回答
收藏

6 个回答

  • 原点的原点
    原点的原点
    2019-08-08

    setData才能更新视图

    2019-08-08
    有用
    回复 1
    • 2019-08-09
      谢谢
      2019-08-09
      回复
  • 烧饼
    烧饼
    2019-08-08

    我理解的是,在开发工具环境中,只使用this.data.***来修改数据,开发工具AppData里的数据也会同步改,但是并不会同步到页面上;而在AppData里改是会同步到页面上的。

    剩下的跟楼上说的点都一样。Page.data既存在于JS逻辑层和View视图层中,理论上它俩的数据内容是一样的,但它们数据又是分开的,在两个层里面分别存放了一份拷贝。即使你截图里有代码是修改到了list,但是使用这种修改是不会更新到页面的。


    2019-08-08
    有用
    回复 1
    • 2019-08-09
      谢谢
      2019-08-09
      回复
  • 卢霄霄
    卢霄霄
    2019-08-08

    如果list里放的基本类型的数据

    let list = this.data.list.concat()

    如果有对象类型的,可以用json转,性能要低点,不过也还好

    let list = JSON.parse(JSON.stringify(this.data.list))

    2019-08-08
    有用
    回复 5
    • 2019-08-08
      你看我发的图片,他data里面的值改了
      2019-08-08
      回复
    • 卢霄霄
      卢霄霄
      2019-08-08回复
      我说的方法,你试了吗?
      2019-08-08
      回复
    • 小醉月思
      小醉月思
      2019-08-08回复
      指针指向同一个地址,会被改的。
      2019-08-08
      回复
    • 小醉月思
      小醉月思
      2019-08-08回复
      而卢霄霄提供的方法会拷贝出一个值相同的对象,这样就是两个数组了,你这样操作的是同一个数组
      2019-08-08
      回复
    • 2019-08-09
      感谢感谢
      2019-08-09
      回复
  • 有余
    有余
    2019-08-08

    setData 会跟更新 data上的数据 并渲染到页面上   你更改了 list数组中的某个元素的值  但是没有setData 所以页面上没有更新  你只是更改了 data对象中 list属性的值  并没有setData

    2019-08-08
    有用
    回复 8
    • 2019-08-08
      你看我发的图片,他data里面的值改了
      2019-08-08
      回复
    • 有余
      有余
      2019-08-08回复
      对象和数组他们储存的是指针 存的不是数据 变量list 和 this.data.list 他们的指针是一样的 当你改变了 list的指针后 this.data.list的指针也会发生变化 所以你看到的是 appData里面的数据发生变化了 但是页面没有发生变化 是因为你没有setData 这就是为什么你看到appData里面的数据发生变化了 但是页面上的数据没有发生变化 数组也是同理 你可以试试 这是JS引用类型值的特点
      2019-08-08
      2
      回复
    • 2019-08-09回复有余
      感谢,理解了!
      2019-08-09
      回复
    • 2019-08-09
      大佬,再问问,那为什么我去掉this.setData({ is_edit:false}) data里面的数据又不会变
      2019-08-09
      回复
    • 2019-08-09回复有余
      就是不要setData , list里面的值不会变
      2019-08-09
      回复
    查看更多(3)
  • 铭锋科技
    铭锋科技
    2019-08-08

    但是list在页面的数据没更新,不想list被setData

    肯定没更新,list想被setData也没办法

    2019-08-08
    有用
    回复 1
    • 2019-08-08
      你看我发的图片,他data里面的值改了
      2019-08-08
      回复
  • var 友原
    var 友原
    2019-08-08

    你不是只setData了is_edit吗

    2019-08-08
    有用
    回复 3
    • 2019-08-08
      你看我发的图片,他data里面的值改了
      2019-08-08
      回复
    • var 友原
      var 友原
      2019-08-08回复
      你还是先去了解下setData是干嘛的吧,你只是改变了逻辑层的数据,想要在页面更新必须setData才能渲染到视图层,data里的值是改了,但是没有渲染到视图层
      2019-08-08
      回复
    • 2019-08-09回复var 友原
      感谢感谢
      2019-08-09
      回复
登录 后发表内容
问题标签