vue-render函數

Vue 推薦在絕大多數情況下使用 template 來創建你的 HTML。然而在一些場景中,你真的需要 JavaScript 的完全編程的能力,這就是 render 函數,它比 template 更接近編譯器。vue提供了render函數大大的提高了JavaScript的編程能力,雖然在日常的使用中是比較少見的但是理解render函數對應加深對Vue組件的使用都是很有幫助的。下面我們就針對render函數進行探討。


render函數提供一個createElement,而createElement可接受三個參數具體情況如下:

第一個參數

第一個參數可以是HTML標簽名,組件或者函數都可以。

{
   type: String || Object || Function,
   required: true
}

??

<template>
  <div class="dome">
    <div id="app">
    </div>
  </div>
</template>

<script>
  Vue.components('dom', {
    render: function (createElement) {
      return createElement('div');
    }
  });
  new Vue({
    el: '#app'
  });</script>

第二個參數

第二個參數為創建元素的一些屬性。

{
  type: Object,
  required: false
}

??

Vue.components('dom', {
    render: function (createElement) {
      return createElement('div', {
        'class': {
          container: true
        },
        style: {
          cursor: 'pointer'
        },
        domProps: {
          innHTML: 'baz'
        }
      });
    }
  });
  new Vue({
    el: '#app'
  });

第三個參數

第三個參數為創建元素的子節點。

{
  type: String || Array,
  required: false
}

??

<script>
  Vue.components('dom', {
    render: function (createElement) {
      return createElement('div', [
        createElement('h1', '主標'),
        createElement('h2', '副標')
      ]);
    }
  });
  new Vue({
    el: '#app'
  });
</script>

上述就是render幾個參數的具體信息,而用render函數生成的組件的子元素就在$slots.default中。

Vue提供的實例方法在render函數中使用

<template>
  <div class="dome">
    <div id="app">
      <dom-input
        :value="pValue"
        @input="val=>pValue=val">
      </dom-input>
    </div>
  </div>
</template>

<script>
  Vue.components('dom-input', {
    render: function (createElement) {
      const _this = this;
      return createElement('div', {
        domPopps: {
          value: _this.name
        },
        on: {
          input: function () {
            _this.$emit('input', event.taget.value);
          }
        }
      });
    },
    props: {
      value: String
    }
  });
  new Vue({
    el: '#app',
    data: {
      pValue: ''
    }
  });
</script>

上面的例子中我們創建了一個input組件,在組件中當輸入的觸發了input事件emit了input的value;而在外層中接受了這個value讓pValue的值等于value。而pValue又通過props把值傳入input組件中從而實現了類似v-model的數據綁定。

通過了上面render函數的一個例子我們看到了props和事件的觸發的使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。