其他分享
首页 > 其他分享> > render函数拓展

render函数拓展

作者:互联网

1,我们需求<Example :tags="['h1','h2','h3']"></Example>能够生成

<div>
    <h1>0</h1>
    <h2>1</h2>
    <h3>2</h3>
</div>

此时我们可以自定义render函数渲染

  <script src="./vue.js"></script>
  <div id="app">
    <Example :tags="['h1','h2','h3']"></Example>
  </div>
  <script>
    Vue.component('Example',{//注册组件
      props:['tags'],
      render(h){
        const children = this.tags.map((item,i)=>h(item,{attrs:{class: 'box'}},i))
        return h('div',children)
      }
    })
    new Vue({el:'#app'})
  </script>

 

2.高阶组件:在原有组件上进行加强扩展

我们需要一个动态渲染头像的组件,调用不同的api生成不同的头像

初始组件可以是

 const Avatar = {//定义组件     props:['src'],     template:'<img :src="src">'   } 只有一个src属性和img元素,此时我们可以在增强组件中加入api的调用获取头像赋值给该组件
<script>
  function fetchUrl(username, cb) {//获取图片函数
      setTimeout(() => {
        cb('./2.jpg')
      }, 500)
  }
  function withAvatarUrl(InnerComponent){//组件增强器
    return{
      props:['username'],//接收InnerComponent组件的props
      data(){
        return{
          url:'./1.jpg'//默认图片
        }
      },
      created(){
        fetchUrl(this.username,url=>{//获取api接口图片
          this.url=url
        })
      },
      render(h){
        return h(InnerComponent,{//渲染组件,动态更改src属性
          attrs:{src:this.url},
        })
      }
    }

  }
  const SmartAvatar = withAvatarUrl(Avatar)

  new Vue({
    el:'#app',
    components:{SmartAvatar}//注册组件
  })
</script>

初始给了一个url,模拟调用接口5毫秒之后获取到新的url赋值给url,最好在渲染的时候将url作为src属性传入。

标签:src,return,函数,render,url,拓展,props,组件
来源: https://www.cnblogs.com/lijun12138/p/16361659.html