收藏
回答

小程序navigateTo新打开多个同一路由页面返回的时候数据不正确

小程序navigateTo新打开多个同一路由页面,然后返回上一个页的时候,当前的页面表面数据是对的,貌似是缓存,但其实data记录的是刚打开多个页面,最后一个页面的数据,这时页面进行交互点击事件之类的 重新渲染就能看到

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

6 个回答

  • 米饭
    米饭
    2021-09-20

    这么简单的问题,竟然没有一个人知道。。。。

    先看下面的代码结构:我们一般都会声明一个 that,然后在 onLoad 里把 this 交给 that

    事故原因:同一个路由(页面)被多次 navigateTo 的时候,that 持有的是最后一个 this

    解决方式:返回的时候,在 onShow 里把当前页面的 this 交给 that 就行了

    var that;
    Page({
        onLoad(options) {
            that = this;
        },
    
        onShow() {
            that = this; // 这行代码解决了所有的问题
        }
    })
    
    2021-09-20
    有用 2
    回复
  • 2019-02-26

    导致原因:

        页面 A、与页面 B 共享同一个 Page 实例导致的


    目前尝试过两种不是很好的解决办法:

    第一种:    修改 `Data` 数据结构,用商品的 `goodsId` 值作为 key,如下


    ```

    data = {

        Data: {

        [goodsId_A]: '',

        [goodsId_B]: '',

        // ...

      }

    }

    ```

    第二种: 从页面参数中取goodsId,在onshow中做更新

    ```

    onShow() {


        const currentPages = getCurrentPages() || [] // eslint-disable-line


        const { options } = currentPages[currentPages.length - 1] || {}


        let { goodsId = ''} = options


        this.goodsId = goodsId


        this.$apply()


    }

    ```

    2019-02-26
    有用 1
    回复 1
    • 2019-02-26

      如果有好的办法,欢迎补充

      2019-02-26
      回复
  • 舟游海上
    舟游海上
    2021-09-13

    在url路径后拼上一个随机数

    例如:

    Taro.navigateTo({

    url:'/pages/detail/index?meetingId=${id}&time=${new Date().getTime()}'

    })




    2021-09-13
    有用
    回复
  • 3
    3
    2020-10-09

    我在onUnload清空了works,再重新进来,实际上页面已经渲染正确的新数据,只是我代码取data取到的是却是旧页面的数据,所以直接报错

    2020-10-09
    有用
    回复
  • 微盟
    微盟
    2019-01-29

    navigateTo需要带上商品id,每次打开的时候需要根据商品id重新去接口取数据放入setData,重新渲染

    2019-01-29
    有用
    回复 1
  • 是小白啊
    是小白啊
    2019-01-29

    navigateTo新打开多个同一路由页面=>这个操作是?

    2019-01-29
    有用
    回复 3
登录 后发表内容