zoukankan      html  css  js  c++  java
  • Vue中Jsx的使用

    什么是JSX?

    JSX就是Javascript和XML结合的一种格式。React发明了JSX,利用HTML语法来创建虚拟DOM。当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析。

    应用场景是什么?

    当需要用render函数写一个复杂的组件时,可以考虑使用jsx的方式。让代码结构简单,降低开发难度,提升易读性。

    举个栗子

    vue.js官网demo:https://cn.vuejs.org/v2/guide/render-function.html#JSX

    import AnchoredHeading from './AnchoredHeading.vue'
    
    new Vue({
      el: '#demo',
      render: function (h) {
        return (
          <AnchoredHeading level={1}>
            <span>Hello</span> world!
          </AnchoredHeading>
        )
      }
    })

    我开发过程中的栗子:

    1.调用

     {
              title: "组织机构",
              resizable: true,
              minWidth: 200,
              align: "left",
              key: "organizeName",
              render: (h, params) => {
                return (
                  <TemplateMainOrgs {...{ props: { organizeName: params.row.organizeName } }} ></TemplateMainOrgs>
                )
              }
            },

    2.定义

    <template>
      <Tooltip placement="top" :class="{detailClassFix:isDetailPage}">
        <div class="ellipsis-2line" style="-webkit-box-orient: vertical;" v-if="orgs.length>0">
          <div v-for="(org,index) in orgs" :key="index">
            <p>{{org}}</p>
          </div>
        </div>
        <div class v-else>--</div>
        <div slot="content">
          <div class v-if="orgs.length>0">
            <div v-for="(org,index) in orgs" :key="index">
              <p>{{org}}</p>
            </div>
          </div>
          <div class v-else>--</div>
        </div>
      </Tooltip>
    </template>
    <script>
    export default {
      props: {
        organizeName: {
          type: String,
          required: true,
          default: '',
        },
        parentName: {
          type: String,
          required: false,
        },
      },
      data () {
        return {
        }
      },
      computed: {
        isDetailPage: function () {
          return this.parentName == 'detail'
        },
        orgs: function () {
          return this.handleName() || []
        },
      },
      created () {
      },
      methods: {
        handleName () {
          if (this.organizeName) {
            let arr = this.organizeName.split(',')
            return arr.map(item => {
              return item.replaceAll('*', ' > ')
            })
          }
        }
      },
    }
    </script>
    <style lang="less" scoped>
    .detailClassFix {
      vertical-align: top;
      .ellipsis-2line {
        -webkit-line-clamp: 8;
      }
    }
    </style>
    View Code

    可以看出,由于需要渲染的内容及其复杂,不易于使用render函数直接书写,因此将内容单独为一个组件,在此引入。而且抽取出来的组件也可以用在其他地方。

    如何给jsx组件传值

    vueJsx readerme

    --------学习 交流 提升-----------
  • 相关阅读:
    java 单点登录机制
    java 使用SAX解析xml 文件
    微信支付demo
    java 23种设计模式 深入理解
    感慨
    GC学习笔记
    mysql5.6乱码
    substring,subsequence,charAt执行效率的不同
    一个数组nums,其中任意两个值等于给定值target,返回这两个值在nums里的位置
    排序时间复杂度对比
  • 原文地址:https://www.cnblogs.com/blogNYGJ/p/14452171.html
Copyright © 2011-2022 走看看