微信小程序-列表渲染过程中的命名冲突问题

简介: 微信小程序可有意思了

发现问题

对于在双重循环中需要在内层循环中访问外层循环的数据的情况,可以使用 wx:for-item 指令来为外层循环的变量指定一个新的名称。

如下,展示了如何解决双重循环中的变量名冲突问题,并在内层循环中访问外层循环的数据:

<block wx:for="{
   {outerList}}" wx:for-item="outerItem" wx:key="index">
  <view>外层循环变量:{
   {
   outerItem}}</view>
  <block wx:for="{
   {outerItem.innerList}}" wx:key="index">
    <view>内层循环变量:{
   {
   item}},外层循环变量:{
   {
   outerItem}}</view>
  </block>
</block>

咱通过使用 wx:for-item 指令将外层循环的变量名指定为 outerItem,就可以在内层循环中使用 outerItem 来访问外层循环中的数据啦。

这样做可以避免变量名冲突,并使你能够方便地在内层循环中访问外层循环的数据。

模拟数据,解决问题

假设有一个电商平台,需要展示多个商品分类下的商品列表。每个分类下都有多个商品,而且需要在模板中进行双重循环渲染。

为了解决循环命名和索引冲突的问题:

外层循环:使用 wx:for 指令指定外层循环的数据源,并定义一个外层循环的索引变量,如 outerIndex。

内层循环:在外层循环的内部使用 wx:for 指令指定内层循环的数据源,并定义一个内层循环的索引变量,如 innerIndex。

命名冲突:为了避免命名冲突,可以使用有意义的不同变量名来表示不同层级的循环项,比如外层循环的变量名为 category,内层循环的变量名为 product。

假设我们有以下的数据结构表示电商平台的商品分类和商品列表(实际是要来自后端):

const categories = [
  {
   
    id: 1,
    name: '电子产品',
    products: [
      {
    id: 11, name: '手机' },
      {
    id: 12, name: '电视' },
      {
    id: 13, name: '笔记本电脑' }
    ]
  },
  {
   
    id: 2,
    name: '家居用品',
    products: [
      {
    id: 21, name: '沙发' },
      {
    id: 22, name: '床' },
      {
    id: 23, name: '餐桌' }
    ]
  }
];

现在我们来对这个数据结构进行代码重构,确保在渲染模板时能够避免命名和索引冲突的问题:

<block wx:for="{
   {categories}}" wx:for-item="category" wx:key="category.id">
  <view>{
   {
   category.name}}</view>
  <block wx:for="{
   {category.products}}" wx:for-item="product" wx:key="product.id">
    <view>{
   {
   product.name}}</view>
  </block>
</block>

如上,我们使用了wx:for-item指令来为外层循环的变量命名为category,并为内层循环的变量命名为product。通过给每个循环项添加唯一的key值,这里使用了商品的id来作为 key。这样就确保了在渲染模板时,不会出现命名和索引的冲突。

假设商城里有一个书本分类的列表渲染需求

假设从后端得到如下数据结构

const bookCategories = [
  {
   
    id: 1,
    name: '小说',
    subcategories: [
      {
   
        id: 11,
        name: '爱情小说',
        subcategories: [
          {
   
            id: 111,
            name: '现代言情',
            books: [
              {
    id: 1111, title: '小时代' },
              {
    id: 1112, title: '步步惊心' }
            ]
          },
          {
   
            id: 112,
            name: '古装言情',
            books: [
              {
    id: 1121, title: '红楼梦' },
              {
    id: 1122, title: '倾城之恋' }
            ]
          }
        ]
      },
      {
   
        id: 12,
        name: '科幻小说',
        subcategories: [
          {
   
            id: 121,
            name: '星际战争',
            books: [
              {
    id: 1211, title: '银河系漫游指南' },
              {
    id: 1212, title: '三体' }
            ]
          },
          {
   
            id: 122,
            name: '未来世界',
            books: [
              {
    id: 1221, title: '1984' },
              {
    id: 1222, title: '机器人时代' }
            ]
          }
        ]
      }
    ]
  },
  {
   
    id: 2,
    name: '非小说类',
    subcategories: [
      {
   
        id: 21,
        name: '历史',
        books: [
          {
    id: 211, title: '中国古代历史' },
          {
    id: 212, title: '世界现代史' }
        ]
      },
      {
   
        id: 22,
        name: '哲学',
        books: [
          {
    id: 221, title: '人类简史' },
          {
    id: 222, title: '道德经' }
        ]
      }
    ]
  }
];

具体解决思路如下

我们使用了多个嵌套的 wx:for 循环来处理多重嵌套的书本分类结构。我们为每个循环层级的变量指定了不同的名称,以避免命名冲突。同时,我们使用了 wx:if 条件指令来处理可选的子分类和书本列表,以确保只有存在对应数据时才渲染相应的内容。

<block wx:for="{
   {bookCategories}}" wx:for-item="category" wx:key="category.id">
  <view>{
   {
   category.name}}</view>
  <block wx:if="{
   {category.subcategories}}">
    <block wx:for="{
   {category.subcategories}}" wx:for-item="subcategory" wx:key="subcategory.id">
      <view>{
   {
   subcategory.name}}</view>
      <block wx:if="{
   {subcategory.subcategories}}">
        <block wx:for="{
   {subcategory.subcategories}}" wx:for-item="nestedSubcategory" wx:key="nestedSubcategory.id">
          <view>{
   {
   nestedSubcategory.name}}</view>
          <block wx:if="{
   {nestedSubcategory.books}}">
            <block wx:for="{
   {nestedSubcategory.books}}" wx:for-item="book" wx:key="book.id">
              <view>{
   {
   book.title}}</view>
            </block>
          </block>
        </block>
      </block>
      <block wx:if="{
   {subcategory.books}}">
        <block wx:for="{
   {subcategory.books}}" wx:for-item="book" wx:key="book.id">
          <view>{
   {
   book.title}}</view>
        </block>
      </block>
    </block>
  </block>
  <block wx:if="{
   {category.books}}">
    <block wx:for="{
   {category.books}}" wx:for-item="book" wx:key="book.id">
      <view>{
   {
   book.title}}</view>
    </block>
  </block>
</block>
目录
相关文章
|
3月前
|
JSON 小程序 数据格式
微信小程序默认的文字内容在左上角怎么办?带你0基础快速了解skyline渲染模式。
本文主要介绍微信小程序开发中遇到的问题及其解决方法。问题通常由微信小程序自带的Skyline渲染模式引起,而非代码编写错误。解决步骤包括:1. 找到全局配置文件app.json;2. 去掉相关配置项;3. 修改后的配置示例。通过这些步骤可以有效解决文字内容顶格或覆盖的问题。文中还提供了进一步了解Skyline渲染模式的链接,帮助开发者深入理解其原理和应用。
472 58
|
7月前
|
JSON 小程序 前端开发
towxml的使用,在微信小程序中快速将markdown格式渲染为wxml文本
本文介绍了在微信小程序中使用`towxml`库将Markdown格式文本渲染为WXML的方法。文章提供了`towxml`的概述、安装步骤、以及如何在小程序中配置和使用`towxml`进行Markdown解析的详细说明和代码示例。
|
7月前
|
小程序 前端开发 索引
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
这篇文章介绍了微信小程序中条件渲染和列表渲染的使用方法,包括wx:if、wx:elif、wx:else、wx:for、wx:key以及block标记和hidden属性的使用。
微信小程序中的条件渲染和列表渲染,wx:if ,wx:elif,wx:else,wx:for,wx:key的使用,以及block标记和hidden属性的说明
|
9月前
|
小程序 开发者
【微信小程序】 微信小程序报错不在以下request合法域名列表中
【微信小程序】 微信小程序报错不在以下request合法域名列表中
1335 0
|
2月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
24天前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
24天前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
1月前
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
920 11
技术小白如何利用DeepSeek半小时开发微信小程序?
|
1月前
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
271 11
|
6月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
1539 7

热门文章

最新文章

下一篇
oss创建bucket