vue Render函數的使用方法

Render函數是vue2.x 新增的一個函數、主要用來提升節點的性能,它是基於JavaScript計算。使用Render函數將template裏面的節點解析成虛擬的dom。

前期在使用 iview 和 element 樹形控件時,想要在節點的前面加上光標、後面加上編輯按鈕,找遍所有的 API 都沒有找到對應設置方法,只看到了rendoerContent 函數,發現此函數可以使用想要功能,render-content 函數仔細研究了一番,發現不僅好用,並且靈活。

本例使用 vue  +  element 實現
具體文章:http://caibaojian.com/vue/guide/render-function.html

 

在我們的項目中,優化前端代碼(打包有點慢),發現編輯器報錯,然後進行如下優化

<script>
  export default {
    name: 'Item',
    functional: true,
    props: {
      icon: {
        type: String,
        default: ''
      },
      title: {
        type: String,
        default: ''
      }
    },
    render(h, context) {
      const { icon, title } = context.props
      const vnodes = []

      if (icon) {
        vnodes.push(<svg-icon icon-class={icon}/>)
      }

      if (title) {
        vnodes.push(<span slot='title'class='system-menu-title'>{(title)}</span>)
      }
      return vnodes
    }
  }
</script>

編輯器報錯如下:

 

由於這裏採用的是存HTML代碼,因此爲了改掉這部分,進行如下調整

 

 

<script>
export default {
  name: 'Item',
  functional: true,
  props: {
    icon: {
      type: String,
      default: ''
    },
    title: {
      type: String,
      default: ''
    }
  },
  render: function (createElement,context) {
    const vnodes = []
    const { icon, title } = context.props
    if (icon) {
      const elHtml  = createElement('svg-icon',{
        attrs: {
          'icon-class': icon
        }
      })

      vnodes.push(elHtml)
    }

    if (title) {
      const elHtml  = createElement('span',{
        attrs: {
          slot: title,
          class:'system-menu-title'
        }
      },title)
      vnodes.push(elHtml)
    }
    return vnodes
  }
}
</script>

做了規範修改之後,功能依然正常,看起來更加規範了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章