• vue jsx


    安装vue

    cnpm i -g @vue/cli
    cnpm i -g @vue/cli-service-global
    

    创建基本文件

    • main.js
    import Vue from 'vue';
    import App from './App';
    new Vue({
      el: '#app',
      render: h => h(App)
    })
    
    
    
    • App.vue
    <template>
        <div>
            <labelx :t="2">你好,中国</labelx>
        </div>
    </template>
    <script>
        import labelx from './component/label.js'
        export default {
          components: {
            labelx
          }
        }
    </script>
    
    • label.js
    export default {
      props: {
        t: {}
      },
      render() {
        let tag = 'h' + this.t;
        return (
          <tag>{this.$slots.default}</tag>
        )
      }
    }
    
    
    

    jsx使用场景

    动态标签,组件内部有可能是li,也有可能是span,实现插槽效果

    <li></li>
    <li></li>
    
    <span></span>
    <span></span>
    
    • App.Vue
    <template>
        <div>
            <list :data="['香蕉','苹果']" :render="render" />
        </div>
    </template>
    <script>
        import List from "./component/List";
        export default {
          components: {
            List,
          },
          methods: {
            render(h, item) {
              return <span>{item}</span>
            }
          }
        }
    </script>
    
    
    • List.vue
    <template>
        <div>
            <template v-for="(item, index) in data">
                <ListItem :render="render" :key="index" :item="item" />
            </template>
        </div>
    </template>
    <script>
        import ListItem from "./ListItem";
        export default {
          props: {
            data: {
              type: Array,
              default: () => []
            },
            render: {
              type: Function
            }
          },
          components: {
            ListItem
          }
        }
    </script>
    
    
    • ListItem.js
    export default {
      props: {
        render: {
          type: Function,
        },
        item: {
          type: String
        }
      },
      render(h) {
        return this.render(h, this.item)
      }
    }
    
    

    插槽

    • App.vue
    <template>
        <div>
            <list :data="['香蕉','苹果']">
                <template v-slot:cItem="{item}">
                    <li>{{item}}</li>
                </template>
            </list>
        </div>
    </template>
    <script>
        import List from "./component/List";
        export default {
          components: {
            List,
          },
          methods: {
          }
        }
    </script>
    
    
    
    • List.vue
    <template>
        <div>
            <template v-for="(item) in data">
                <slot name="cItem" :item="item"></slot>
            </template>
        </div>
    </template>
    <script>
        export default {
          props: {
            data: {
              type: Array,
              default: () => []
            },
            render: {
              type: Function
            }
          },
          components: {
          }
        }
    </script>
    
    

    父组件传递组件给子组件

    1. 使用插槽
    2. 父组件传递render方法给子组件
  • 相关阅读:
    【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)
    从MySQL slave system lock延迟说开去
    一文搞懂Raft算法
    Relinking Oracle Home FAQ ( Frequently Asked Questions) (Doc ID 1467060.1)
    Oracle 单实例 Relink Binary Options 说明
    oracle upgrade best pratics
    sysbench安装、使用、结果解读
    Linux 进程管理之四大名捕
    iOS 严重问题解释(crash)
    iOS 图片剪切和压缩的几个方法
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/15738162.html
Copyright © 2020-2023  润新知