收藏
回答

上拉触底 加载数据后,原先加载的数据不会在子组件重新加载吗,这是一个BUG吗

问题模块 框架类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 onReachBottom,子组件数据加载 微信iOS客户端 Android 6.6.3 1.9.90






数据库有13条数据,初始化加载10条数据,当我下拉触底时,加载了剩下的3条数据,然后在父组件setData,

const that = this;

app.api('api', this.data.apiParams, res => {

that.setData({

list: that.data.list.concat(res)

});

});


list 为父组件数据,Array格式,然后遍历传递给子组件,但是只传递了3条数据,(此时list是13条数据),原先的10条数据没有传递给子组件

下图为footer.js子组件生命周期,可以看到我打印this.data为后两张图的数据


第一次加载10条数据,打印10条




第二次加载剩下的3条数据,只打印了3条

(以为是13条,因为我在父组件中触底时加载时setData

   that.setData({

   list: that.data.list.concat(res)

   });


请问要如何才能让子组件接收到包含原来的数据,还是我的姿势不对吗?请各位大佬指教,感谢!


邀请回答
复制链接收藏投诉关注问题回答

12 个回答

  • 这都申请了
    这都申请了
    2018-03-21

    没有这么用过,出问题的只有footer组件吗?

    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21

    header组件也出现了,貌似子组件都会出现该问题

    2018-03-21
    赞同
    回复
  • 这都申请了
    这都申请了
    2018-03-21

    不对兄弟,你这不是只打印了三条,这是打印了三次,实际效果应该是对的吧?

    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21



    你如果仔细看得话,可以看到标题样式和右下角的日期,日期我是拿时间戳格式化的,旧数据没有格式化,新数据格式化了

    结构样式
    原有数据


    样式不见了,时间戳也没格式化 新数据

    2018-03-21
    赞同
    回复
  • 这都申请了
    这都申请了
    2018-03-21

    第一次加载数据没有格式化日期吗?不过我好像明白你的意思了,你说的没有重新加载应该是wx:key起作用了,因为你是循环加载多个组件的。

    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21

    第一次加载数据有格式化日期,标题样式也有,但是触底加载新数据进来后,只有新数据日期有格式化和有样式,旧数据(原本有格式化和样式)没有格式化和样式不见了 你说wx:key,起初我也怀疑是这个原因,但是我把wx:key去掉也是同样的结果

    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21

    目前我的解决办法是不用子组件了,直接在父组件写,好烦

    2018-03-21
    赞同
    回复
  • 杨泉
    杨泉
    2018-03-21

    日期没有格式化的原因是因为,第一次组件加载的时候ready发生,但是组件property传递来的data,此时并未渲染。

    ready是可能发生在数据渲染之前的,明白?


    你这种情况把格式化那部分做到property的observer上,或者直接在wxml中使用wxs来实现

    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21

    @杨泉 谢谢你 ,格式化的部分我做在了observer上,解决了这个问题

    样式我试了3种方法,

    1.wxs渲染不出来



    2.ovserver 不知道如何做

    3.

    请问大佬还有什么办法吗,谢谢大佬解答


    2018-03-21
    赞同
    回复
  • UP
    UP
    2018-03-21

    第三种是可以的,但是我感觉不是很优雅

    2018-03-21
    赞同
    回复