收藏
回答

wx:key 设置不生效

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx:key 工具 * 1.9.94

- 当前 Bug 的表现(可附上截图)


当渲染一个对象数组的时候,我期望每次新插入数据就在 ready() 中打印一下它的数据。但是在实际的使用过程中会发现新插入的数据不会触发 ready(),每次都触发都是初始的数据。


个人猜测是因为 wx:key 设置不生效,导致默认使用数组下标来设置 key,每次向数组前面插入数据的时候 (0,-10) 的 DOM 总是存在的导致了这个问题。


- 预期表现


希望能每次插入就打印插入的数据,而不是初始数据


- 复现路径


代码片段中点击向前插入按钮查看控制台的打印结果即可发现问题


- 提供一个最简复现 Demo


代码片段 wechatide://minicode/zkkjJemA6vY8


最后一次编辑于  2018-03-27  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

6 个回答

  • LastLeaf
    LastLeaf
    2018-03-27

    你好,wx:key 不支持数据绑定的形式,你的例子中,应为 wx:key="item"

    2018-03-27
    赞同
    回复
  • 公子
    公子
    2018-03-28

    @ghost 应该是官方的回答是对的,就是 item,对象名只是我随便写的例子。这里的主要问题还是我写了花括号了。。。之前一直都分不清什么情况要加花括号什么情况下不要加。。。。

    2018-03-28
    赞同
    回复
  • ghost
    ghost
    2018-03-28

    我测试了确实是wx:key导致的问题,

    wx:key='item.item' 其中的item.item 改成对象字段名称即可,你把对象名称写成item,不知道你是故意为之还是为何?

    修改代码:

    const data = Array.from({length: 10}, (v, k) => ({

    sid: 'list' + (k+base)

    }));

    <itema wx:for="{{data}}" wx:key="sid" data="{{item.sid}}">

    </itema>



    2018-03-28
    赞同
    回复
  • ghost
    ghost
    2018-03-28

    这样做有何实际意义?

    2018-03-28
    赞同
    回复
  • 公子
    公子
    2018-03-27

    @LastLeaf 嗯,已经发现了,thx~

    @赵子龙 我就是故意要往前插的

    2018-03-27
    赞同
    回复
  • 赵青山
    赵青山
    2018-03-27

    你concat插反了

    2018-03-27
    赞同
    回复