原创

微信小程序列表渲染wx:for无效

按照官方文档示例编写如下,结果列表无法展示。

以下参考官方文档:

列表渲染 | 微信开放文档 https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/list.html

wx:for

在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。

默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

<view wx:for="{{array}}">
{{index}}: {{item.message}}
</view>
Page({
data: {
  array: [{
    message: 'foo',
  }, {
    message: 'bar'
  }]
}
})

尝试添加wx:key,无果

尝试把将变量改为常量,成功。

<view wx:for="{{[1,2,3]}} ">
{{item}}
</view>

猜测array值有问题。

尝试setData,提示array是undefined. 推测data中的赋值无效.

onLoad() {
this.setData({
  array:this.data.array
})
},

image-20210812211627245

将array直接赋值后,问题解决。

onLoad() {
this.setData({
  array:[{
    message: 'foo',
  }, {
    message: 'bar'
  }]
})
},

很奇怪,最开始新建小程序时,data中的String类型是可以直接赋值的,难道只有复杂类型才需要用setdata进行赋值?那么微信小程序官方文档为何采用data直接赋值的方式进行讲解?

在data中重新定义String类型变量,发现在view中也无法正常显示了。

难道是添加了color UI导致的问题。可是项目中很多变量都需要直接在data中赋值使用的,不支持这样的功能,未来会比较麻烦。

不死心,重新建立空项目,一步步把color ui加进来,发现无论是string类型,还是数组类型,都支持直接在data初始化时赋值。

那么问题究竟出在哪里?

两个项目文件逐一比较,发现出问题的项目页面中居然有两个data,js文件底部的位置的data如下。

image-20210812213651657

茅塞顿开,原来一直是这个data在捣鬼。这是复制另一个文件代码时,不小心复制过来的。真是一时大意,祸害好几个小时啊。

正文到此结束