yewanji 2023-09-18 14:44 采纳率: 36.3%
浏览 5
已结题

vuejs 如何使用jsx 渲染虚拟节点

一般情况下,我们渲染表格的时候,往往会使用插槽进行渲染数据,最常见的莫过于下面这种了,但是我觉得这种写法不够优雅,复用也比较困难,如果需要判断的多了,反而会导致代码臃肿,

  <template v-slot:operation="{ row }">
      <span v-if="row.operation === 'Y'">Hello Y</span>
      <span v-else-if="row.operation === 'N'">Hello N</span>
      <span v-else-if="row.operation === 'F'">Hello F</span>
    </template>


我想改成下面这种写法,还应该怎么做

        statusMap: {
          'Y': (h, {root, node, data}) => {
            return h('span', {}, 'hello')
          },
          'N': (h, {root, node, data}) => {
            return h('span', {}, 'hello')
          },
          'F': (h, {root, node, data}) => {
            return h('span', {}, 'hello')
          }
        },
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-18 16:33
    关注

    【以下回答由 GPT 生成】

    首先,你需要将这些函数放在Vue组件的methods对象中。 然后,你可以使用v-for指令遍历一个数组,该数组包含每个操作对应的数据。 在v-for指令内部,你可以使用v-if指令来根据操作的值,确定要渲染的具体操作。 你可以使用JSX语法,在h函数中创建一个span元素,并将操作的值作为文本内容传递给span元素。代码示例如下:

    data() {
      return {
        statusMap: {
          'Y': (h, { root, node, data }) => {
            return <span>Hello Y</span>
          },
          'N': (h, { root, node, data }) => {
            return <span>Hello N</span>
          },
          'F': (h, { root, node, data }) => {
            return <span>Hello F</span>
          }
        }
      }
    },
    methods: {
      renderOperation(h, { row }) {
        const operation = this.statusMap[row.operation];
        return operation ? operation(h, { root: this, node: row, data: row }) : null;
      }
    }
    

    然后,在模板中,你可以使用v-slot指令和render函数来渲染操作列:

    <template v-slot:operation="{ row }">
      {this.renderOperation(h, { row })}
    </template>
    

    这样你就可以通过JSX在Vue.js中渲染虚拟节点了。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月28日
  • 创建了问题 9月18日

悬赏问题

  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥15 可以实现这个有不同背景颜色的九九乘法表吗?
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用