zoukankan      html  css  js  c++  java
  • 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>
    

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

  • 相关阅读:
    17、Semantic-UI之分页插件
    16、Semantic-UI之模态窗口
    15、Semantic-UI之导航
    14、Semantic-UI之菜单样式
    13、Semantic-UI之表格与表单
    12、Semantic-UI之输入框
    11、Semantic-UI之分割线
    10、Semantic-UI之图片的使用
    9、Semantic-UI之标题
    8、Semantic-UI之其他按钮样式
  • 原文地址:https://www.cnblogs.com/izhaong/p/12154280.html
Copyright © 2011-2022 走看看