uniappx uts 界面渲染循环

在 UniAppX 中使用 UTS 渲染你提供的这种嵌套 JSON 数据时,遇到 msg.msg_body.body.body无法访问的问题,通常是因为 UTS 的强类型特性导致的。你不能像在 JS 中那样直接访问未定义类型的深层嵌套属性。

下面提供两种解决方案,推荐使用方案一。

方案一:使用 UTSJSONObject和 KeyPath 安全访问(推荐用于复杂或不确定的结构)
对于嵌套较深或结构复杂的数据,使用 UTSJSONObject的 keypath方法可以更安全地访问。

将列表数据声明为 UTSJSONObject数组:这样我们就可以利用 UTS 提供的工具方法来访问数据。

使用 getString(或其他对应类型的方法) 和 KeyPath 访问:KeyPath 允许你使用字符串路径直接访问深层属性。

<template>
  <view>
    <!-- 遍历 list 数组 -->
    <view v-for="(msg, index) in list" :key="index">
      <!-- 
        使用 UTSJSONObject 的 getString 方法并通过 KeyPath 访问深层属性。
        KeyPath 字符串 'msg_body.body.body' 表示访问 msg['msg_body']['body']['body']
      -->
      {{ (msg as UTSJSONObject).getString('msg_body.body.body') }}
    </view>
  </view>
</template>
// 假设你的 list 数据是从网络或其他地方获取的,类型为 any 或 UTSJSONObject[]
// 在 data 中声明时,可以将其定义为 UTSJSONObject[] 类型
export default {
  data() {
    return {
      // 将 list 初始化为 UTSJSONObject 数组
      list: [] as UTSJSONObject[],
    }
  },
  onLoad() {
    // 假设这是你的原始数据
    const originList = [{
      "conv_id": "1951214682791092224",
      "msg_body": {
        "type": "im",
        "scope": "im",
        "body": {
          "msgType": "im.social.pr",
          "body": "你好呀",
          "style": "",
          "env": "group:1951214682791092224"
        }
      }
    },
    {
      "conv_id": "1951214682791092224",
      "msg_body": {
        "type": "im",
        "scope": "im",
        "body": {
          "msgType": "im.social.pr",
          "body": "你好呀",
          "style": "",
          "env": "group:1951214682791092224"
        }
      }
    }];

    // 将原始数据转换为 UTSJSONObject 数组并赋值给 list
    // 这里使用 as UTSJSONObject[] 进行类型断言
    this.list = originList as UTSJSONObject[];
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容