收藏
回答

在onLoad得到的数据在onShow生命周期获取的话为什么空?

在onshow中打印数据有正确的数据返回,当打印数据中的内容确实空对象,数据是在onLoad中请求得到的,有没有大佬来解释一下

回答关注问题邀请回答
收藏

3 个回答

  • 零²⁰²⁴
    零²⁰²⁴
    2023-10-19

    1、通过 console.log 输出的 对象类型 变量,在 console 面板里展示的是 即时数据

    2、听你的描述 onLoad 中是通过 接口 去获取到 defPat 的数据,本身这是一个异步操作,所以 onShow 中打印 __data__ 和 __data__.defPat 的时候,都是没有你请求到的数据的,也就是都为 {}

    3、因为 1、的原因,所以你在 console 中看到的打印 __data__ 的值中可以看到请求数据赋值后的 defPat

    4、而打印 __data__.defPat 的值仍然为 {} 的原因应该是因为 onLoad / 首次 onShow 后,整个 __data__ 的值被重新初始化了(应该是在下图的阶段中),所以你打印的 __data__.defPat 是 旧 __data__ 里的变量,自然一直是 {}


    2023-10-19
    有用 1
    回复 12
    • 去码头整点薯条🍟🍟🍟🍟
      去码头整点薯条🍟🍟🍟🍟
      2023-10-19
      非常感谢,大概看懂了
      2023-10-19
      回复
    • 去码头整点薯条🍟🍟🍟🍟
      去码头整点薯条🍟🍟🍟🍟
      2023-10-19
      你好,上图是onLoad执行完之后再执行onShow,当onLoad执行完毕后数据已经回来了,那按理不是有数据的?在onshow过程中应该会初始化嘛?
      2023-10-19
      回复
    • 零²⁰²⁴
      零²⁰²⁴
      2023-10-19回复去码头整点薯条🍟🍟🍟🍟
      不是,生命周期指的是调用顺序,并不是说执行完 onLoad 后才会调用 onShow,而是调用 onLoad 后 马上会调用 onShow
      2023-10-19
      回复
    • 零²⁰²⁴
      零²⁰²⁴
      2023-10-19回复去码头整点薯条🍟🍟🍟🍟
      你可以说下你想实现的场景,感觉你目前的处理可能并不是很合适
      2023-10-19
      回复
    • 去码头整点薯条🍟🍟🍟🍟
      去码头整点薯条🍟🍟🍟🍟
      2023-10-19
      你好,我想要的目的已经通过其他方式实现了,因为还在学习当中,所以想要了解一下里面的道理。原本按照我的思路来说,我想要在onShow中刷新状态(BUG:订单支付成功后返回原来的界面,原来的界面还是未支付状态需要刷新一下),那么在onshow中重新请求数据库的数据就好了(支付成功后相应的数据表会被修改),但是发送请求时,参数是空的(参数是onLoad中请求回来放入data中的)大概就是这个样子
      2023-10-19
      回复
    查看更多(7)
  • CRMEB
    CRMEB
    2023-10-19

    你可以尝试在onShow中使用setTimeout来延迟打印数据,以确保数据已经加载完成。

    2023-10-19
    有用 1
    回复 1
  • 微盟
    微盟
    2023-10-19

    你好,需要贴一下完整的代码片段。目前的信息无法判断问题的原因。

    2023-10-19
    有用
    回复 1
    • 去码头整点薯条🍟🍟🍟🍟
      去码头整点薯条🍟🍟🍟🍟
      2023-10-19
      代码有点多,不过大概就是在onLoad中使用we.request请求数据然后我想在onShow中使用,想把它打印出来,但是跟我发的那个图片一样,直接打印this.data是有数据的,当具体到某一个数据就为空了
      2023-10-19
      回复
登录 后发表内容