vue createElement

今天在用elementUI 的時(shí)候,table的頭部是有顏色小格子的伙单,那么就需要去自定義table的頭部获高,table組件提供了render-header函數(shù),顏色格子一定要用到標(biāo)簽吻育,發(fā)現(xiàn)直接return 出去帶有標(biāo)簽的字符串是解析不了的念秧,搜了下,發(fā)現(xiàn)需要用到createElement <el-table>表頭內(nèi)插入 HTML 標(biāo)簽布疼?跟著這個(gè)issues嘗試了createElement 的使用摊趾,

第一個(gè)參數(shù)為一個(gè) HTML 標(biāo)簽字符串,組件選項(xiàng)對(duì)象游两,后面兩個(gè)參數(shù)為數(shù)據(jù)或者對(duì)象砾层,兩個(gè)順序可以隨意,
如果是一個(gè)HTML標(biāo)簽的話贱案,

{
attrs:{
class:"beauty",
style:""
}
}

參數(shù)為字符串的話會(huì)將后面的{}設(shè)置覆蓋掉肛炮,字符串就是innerText屬性。

domProps: {
     innerHTML: 'dddd'
},

最后一個(gè)參數(shù)為數(shù)組宝踪,里面存放的就是子組件

jsx的優(yōu)勢(shì):

今天看了elementUI的pagination組件發(fā)現(xiàn)里面的事件寫法很奇怪侨糟,on-click={ this.$parent.prev }>是這么寫的,在react中是駝峰命名法瘩燥,于是查閱vue古方文檔里面的render函數(shù)章節(jié)秕重,發(fā)現(xiàn)里面并沒有on-click這種寫法,還有一點(diǎn)比較奇怪厉膀,render函數(shù)沒有返回vnode組件(就是沒有使用createElement)悲幅,而是直接返回了HTML字符串。

pagination.js

  render(h) {
    let template = <div class='el-pagination'></div>;
    const layout = this.layout || '';
    if (!layout) return;
    const TEMPLATE_MAP = {
      prev: <prev></prev>,
      jumper: <jumper></jumper>,
      pager: <pager currentPage={ this.internalCurrentPage } pageCount={ this.internalPageCount } on-change={ this.handleCurrentChange }></pager>,
      next: <next></next>,
      sizes: <sizes pageSizes={ this.pageSizes }></sizes>,
      slot: <my-slot></my-slot>,
      total: <total></total>
    };
    const components = layout.split(',').map((item) => item.trim());
    const rightWrapper = <div class="el-pagination__rightwrapper"></div>;
    let haveRightWrapper = false;

    if (this.small) {
      template.data.class += ' el-pagination--small';
    }

    components.forEach(compo => {
      if (compo === '->') {
        haveRightWrapper = true;
        return;
      }

      if (!haveRightWrapper) {
        template.children.push(TEMPLATE_MAP[compo]);
      } else {
        rightWrapper.children.push(TEMPLATE_MAP[compo]);
      }
    });

    if (haveRightWrapper) {
      template.children.push(rightWrapper);
    }

    return template;
  },

里面的子組件也是直接返回HTML字符串的


原來這是jsx的語法站蝠,使用了babel-plugin-transform-vue-jsx去支持jsx語法,在這個(gè)庫(kù)中看到

render (h) {
  return (
    <div
      // normal attributes or component props.
      id="foo"
      // DOM properties are prefixed with `domProps`
      domPropsInnerHTML="bar"
      // event listeners are prefixed with `on` or `nativeOn`
      onClick={this.clickHandler}
      nativeOnClick={this.nativeClickHandler}
      // other special top-level properties
      class={{ foo: true, bar: false }}
      style={{ color: 'red', fontSize: '14px' }}
      key="key"
      ref="ref"
      // assign the `ref` is used on elements/components with v-for
      refInFor
      slot="slot">
    </div>
  )
}

他事件綁定的方式是用駝峰命名的onClick我現(xiàn)在用的element的版本是1.2.8卓鹿,查看了最新的1.4依舊用的on-click方式Vue jsx 和 React jsx 的一些不同點(diǎn)這篇文章說vue2.1開始支持駝峰的菱魔。
jsx語法的優(yōu)勢(shì):

  • 不用每次都createElement 返回vnode,直接使用正常的HTML嵌套的格式,組件嵌套也是如此吟孙,
import AnchoredHeading from './AnchoredHeading.vue'
new Vue({
  el: '#demo',
  render (h) {
    return (
      <AnchoredHeading level={1}>
        <span>Hello</span> world!
      </AnchoredHeading>
    )
  }
})
  • 事件屬性直接寫在標(biāo)簽上澜倦,不用在配置參數(shù)里配置各個(gè)屬性和事件聚蝶,上面就是直接寫的。
    createElement 的屬性和事件配置:
 on: {
     click: this.clickHandler
  },
 // 正常的 HTML 特性
  attrs: {
    id: 'foo'
  },
  // 組件 props
  props: {
    myProp: 'bar'
  },

element-ui 中哪些使用了jsx語法:
vue : pagination tabs dropdown scrollbar upload
js: col row tooltip

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末藻治,一起剝皮案震驚了整個(gè)濱河市碘勉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桩卵,老刑警劉巖验靡,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異雏节,居然都是意外死亡胜嗓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門钩乍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辞州,“玉大人,你說我怎么就攤上這事寥粹”涔” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵涝涤,是天一觀的道長(zhǎng)媚狰。 經(jīng)常有香客問我,道長(zhǎng)妄痪,這世上最難降的妖魔是什么哈雏? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮衫生,結(jié)果婚禮上裳瘪,老公的妹妹穿的比我還像新娘。我一直安慰自己罪针,他們只是感情好彭羹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泪酱,像睡著了一般派殷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墓阀,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天毡惜,我揣著相機(jī)與錄音,去河邊找鬼斯撮。 笑死经伙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勿锅。 我是一名探鬼主播帕膜,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼枣氧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了垮刹?” 一聲冷哼從身側(cè)響起达吞,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荒典,沒想到半個(gè)月后酪劫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡种蝶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年契耿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螃征。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搪桂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盯滚,到底是詐尸還是另有隱情踢械,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布魄藕,位于F島的核電站内列,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏背率。R本人自食惡果不足惜话瞧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寝姿。 院中可真熱鬧交排,春花似錦、人聲如沸饵筑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽根资。三九已至架专,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄帕,已是汗流浹背部脚。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裤纹,地道東北人睛低。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钱雷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容