• Vue render函数 函数时组件 jsx


    常规组件使用

    定义组件

    components/list/list.vue

    <template>
      <ul>
        <li v-for="(item, index) in list" :key="`item_${index}`">
          {{ item.name }}
        </li>
      </ul>
    </template>
    <script>
    export default {
      name: 'List',
      props: {
        list: {
          type: Array,
          default: () => []
        }
      }
    }
    </script>
    

    components/list/index.js

    import list from './list'
    export default list
    

    组件使用

    views/render-page.vue

    
    <template>
      <div>
        <list :list=list></list>
      </div>
    </template>
    <script>
    import List from '_c/list'
    export default {
      data () {
        return {
          list: [
            { name: 'name1' },
            { name: 'name2' }
          ]
        }
      },
      components: {
        List
      }
    }
    </script>
    

    效果图:
    效果图:

    定义函数式组件

    components/render-dom.vue

    export default {
      function: true,
      props: {
        name: String,
        renderFunc: Function
      },
      render: (h, ctx) => {
        return ctx.props.renderFunc(h, ctx.props.name)
      }
    }
    

    使用函数式组件

    components/list/list.vue

    <template>
      <ul>
        <li v-for="(item, index) in list" :key="`item_${index}`">
          <span v-if="!render">{{ item.name }}</span>
          <render-dom v-else :render-func="render" :name="item.name"></render-dom>
        </li>
      </ul>
    </template>
    <script>
    import RenderDom from '_c/render-dom'
    export default {
      name: 'List',
      components: {
        RenderDom
      },
      props: {
        list: {
          type: Array,
          default: () => []
        },
        render: {
          type: Function,
          default: () => {}
        }
      }
    }
    </script>
    

    views/render-page.vue

    <template>
      <div>
        <list :list=list :render="renderFunc"></list>
      </div>
    </template>
    <script>
    import List from '_c/list'
    export default {
      data () {
        return {
          list: [
            { name: 'name1' },
            { name: 'name2' }
          ]
        }
      },
      components: {
        List
      },
      methods: {
        renderFunc (h, name) {
          return h('i', {
            style: {
              color: 'green'
            }
          }, name)
        }
      }
    }
    </script>
    

    效果图:
    效果图:
    其余文件如函数式组件

    views/render-page.vue

    <template>
      <div>
        <list :list=list :render="renderFunc"></list>
      </div>
    </template>
    <script>
    import List from '_c/list'
    export default {
      data () {
        return {
          list: [
            { name: 'name1' },
            { name: 'name2' }
          ]
        }
      },
      components: {
        List
      },
      methods: {
        renderFunc (h, name) {
          return (
            <i on-click={this.handleClick} style={{ color: 'blue' }}>{name}</i>
          )
        },
        handleClick (e) {
          console.log(e)
        }
      }
    }
    </script>
    

    效果图:
    在这里插入图片描述

  • 相关阅读:
    C# ViewState
    ASP.NET C#中Application Session 的用法
    JS取 Input 控件值方法
    JS通过HTML标签自身属性获取属性值
    SQLServer 数据库操作
    查看和修改 Windows 实例远程桌面默认端口
    只能输入数字0-9 正则表达式,兼容Google Firefox IE浏览器
    C# 类初始化顺序
    window系统 任务计划程序
    微信公众号开发--消息接收与回复
  • 原文地址:https://www.cnblogs.com/izhaong/p/12154280.html
Copyright © 2020-2023  润新知