最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在vue中使用jsx語(yǔ)法

 更新時(shí)間:2022年07月27日 15:52:00   作者:楊柒柒  
本文主要介紹了如何在vue中使用jsx語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

為什么需要在vue中使用jsx

幾年前面試的時(shí)候,被問(wèn)過(guò)這個(gè)問(wèn)題,當(dāng)時(shí)我一臉懵,這兩個(gè)東西為啥要混用呢?

直到后來(lái),我遇到了這種場(chǎng)景。

tab切換展示組件,大部分組件展示表格,除了2個(gè)tab需要展示不同,這個(gè)不同,怎么處理呢?

  • 當(dāng)然可以直接改封裝的tab組件,v-if條件渲染嘛

  • 那如果后面再有其他需求,tab組件繼續(xù)寫if么

  • 這個(gè)時(shí)候,組件就過(guò)于冗余啦

  • 那怎么讓組件統(tǒng)一處理呢?當(dāng)然可以用render函數(shù)來(lái)抽象組件啦

  • render函數(shù)寫法有多惡心,想必大家都知道 => 不知道的看段簡(jiǎn)單的ul,li布局

    with(this){  // this 就是 vm
      return _c(
          'div',
          {
              attrs:{"id":"app"}
          },
          [
              _c(
                  'div',
                  [
                      _c(
                          'input',
                          {
                              directives:[
                                  {
                                      name:"model",
                                      rawName:"v-model",
                                      value:(title),
                                      expression:"title"
                                  }
                              ],
                              domProps:{
                                  "value":(title)
                              },
                              on:{
                                  "input":function($event){
                                      if($event.target.composing)return;
                                      title=$event.target.value
                                  }
                              }
                          }
                      ),
                      _v(" "),
                      (!title) ? _c(
                          'button',
                          {
                              on:{
                                  "click":add
                              }
                          },
                          [_v("submit")]
                      ): _e()
                  ]
              ),
              _v(" "), // 空字符串節(jié)點(diǎn)
              _c('div',
                  [
                      _c(
                          'ul',
                          _l((list),function(item){return _c('li',[_v(_s(item))])})
                      )
                  ]
              )
          ]
      )
    }
  • 這...日子沒(méi)法過(guò)了

  • 于是我們就發(fā)現(xiàn)了jsx的好用,同樣上述代碼,可讀性更高,更加精簡(jiǎn)

在vue中如何使用jsx

主要是依賴babel插件

  • 安裝babel依賴,npm install babel-plugin-transform-vue-jsx babel-helper-vue-jsx-merge-props
  • 配置.babelrc文件
    "plugins": [
        [ "transform-vue-jsx" ]
    ]
  • 子組件是函數(shù)式組件
  // content.js
  export default {
    name: 'content',
    functional: true,
    props: {
      render: Function,
      column: {
        type: Object,
        default: null
      },
      params: {
        type: Object,
        default: () => {}
      }
    },
    render: (h, ctx) => {
      const params = ctx.props.params
      return ctx.props.render && ctx.props.render(h, params)
    }
  }
  • 父組件引入
<el-tabs
  v-model="activeName">
    <el-tab-pane
      v-for="item in tabList"
      :key="item.code"
      :label="item.label">
      <span v-if="item.render">
          <content
              :params="item.params"
              :render="item.render"
            ></content>
      </span>
    </el-tab-pane>
</el-tabs>
    <script>
        import Content from './content'
        components: {
           Content
        },
    </script>

template轉(zhuǎn)jsx的語(yǔ)法轉(zhuǎn)換

v-model,v-if,v-for,v-html,v-text,vue中的指令

  • jsx語(yǔ)法是不會(huì)有對(duì)應(yīng)的指令的,所以我們就要實(shí)現(xiàn)這些指令的功能,對(duì)于v-model
// 在vue中
<el-input
  v-model="searchParams.searchVal">
</el-input>

// 對(duì)應(yīng)jsx語(yǔ)法
function _input (value) {
    this.searchParams.searchVal = value
},
item.render = (h, params) => {
    // 這里也可以從params傳入?yún)?shù)
    return (
        <el-input
          value={this.searchParams.searchVal}
          onInput={_input}>
        </el-input>
    )
}
  • v-if其實(shí)就是判斷語(yǔ)句,用&&或三元表達(dá)式
// 在vue中
<el-button v-if="show"></el-button>

// 對(duì)應(yīng)jsx語(yǔ)法
item.render = (h, params) => {
    return (
        this.show && <el-button></el-button>
    )
}
  • v-for其實(shí)就是循環(huán)語(yǔ)句,用map
// 在vue中
<ul>
    <li v-for="item in list">{{item.label}}</li>
</ul>

// jsx語(yǔ)法
item.render = (h, params) => {
     return (
         <ul>
             {
                 list.map((item, index) => (
                       <li>{item.label}</li>
                 )
             }
         </ul>
     )
 }
  • v-html
item.render = (h, params) { 
    return ( 
        <div> <div domPropsInnerHTML={htmlStr}></div> </div> 
    )
}

vue中el-input組件上觸發(fā)原生enter事件,@keyup.enter.native對(duì)應(yīng)nativeOnKeyup

// 在vue中
<el-input
  @keyup.enter.native="onSearch"
></el-input>

// 在jsx中
item.render = (h, params) => {
     function _keyup (e) {
        if (e.keyCode === 13) {
          // 13為enter鍵的鍵盤碼
          this.onSearch()
        }
     }
     return (
         <el-input
          nativeOnKeyup={e => _keyup(e)}>
        </el-input>
     )
 }

vue中的插槽,在jsx中用scopedSlots

// 在vue中
<el-table
    :data="tableData">
    <el-table-column
      v-for="column in columnData"
      :key="column.value"
      :prop="column.value"
      :label="column.value"
      sortable
      :sort-change="change">
      <template slot-scope="scope">
        <span>{{scope.row[column.value]}}</span>
      </template>
    </el-table-column>
 </el-table>
 
// 在jsx中
item.render = (h, params) => {
    return (
        <el-table
            data={tableData}>
            {
              columnData.map((column, index) => (
                <el-table-column
                  prop={column.value}
                  label={column.label}
                  sortable
                  onSort-change={(...args) => sortChange(...args)}
                  scopedSlots={{
                    default: (scope) => <span>{scope.row[column.value]}</span>
                  }}>
                </el-table-column>
              ))
            }
          </el-table>
    )
}

組件用-分隔的事件,在jsx中在第一段on后大寫即可觸發(fā)

比如el-tablesort-change,在jsx中是onSort-change,第一段在on后大寫即可,見(jiàn)上個(gè)例子

到此這篇關(guān)于如何在vue中使用jsx語(yǔ)法的文章就介紹到這了,更多相關(guān)vue使用jsx語(yǔ)法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決Vue響應(yīng)式數(shù)據(jù)已獲取而視圖不更新的問(wèn)題

    解決Vue響應(yīng)式數(shù)據(jù)已獲取而視圖不更新的問(wèn)題

    這篇文章主要介紹了解決Vue響應(yīng)式數(shù)據(jù)已獲取而視圖不更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Vue中ElementUI分頁(yè)組件Pagination的使用方法

    Vue中ElementUI分頁(yè)組件Pagination的使用方法

    這篇文章主要為大家詳細(xì)介紹了Vue中ElementUI分頁(yè)組件Pagination的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • vue項(xiàng)目index.html中使用環(huán)境變量的代碼示例

    vue項(xiàng)目index.html中使用環(huán)境變量的代碼示例

    在Vue3中使用環(huán)境變量的方式與Vue2基本相同,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目index.html中使用環(huán)境變量的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Vue基礎(chǔ)語(yǔ)法知識(shí)梳理上篇

    Vue基礎(chǔ)語(yǔ)法知識(shí)梳理上篇

    這篇文章主要介紹了Vue基礎(chǔ)語(yǔ)法知識(shí)梳理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-12-12
  • 使用Vue 自定義文件選擇器組件的實(shí)例代碼

    使用Vue 自定義文件選擇器組件的實(shí)例代碼

    這篇文章主要介紹了使用Vue 自定義文件選擇器組件的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Composition API思想封裝NProgress示例詳解

    Composition API思想封裝NProgress示例詳解

    這篇文章主要為大家介紹了Composition API思想封裝NProgress示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)

    Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)

    這篇文章主要給大家介紹了關(guān)于Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)的相關(guān)資料,vue是單頁(yè)面應(yīng)用,路由切換后,定時(shí)器并不會(huì)自動(dòng)關(guān)閉,需要手動(dòng)清除,當(dāng)頁(yè)面被銷毀時(shí),清除定時(shí)器即可,需要的朋友可以參考下
    2023-10-10
  • Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)

    Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Vue全局自定義指令Modal拖拽的實(shí)踐

    Vue全局自定義指令Modal拖拽的實(shí)踐

    最近一直在做的項(xiàng)目是Vue2搭建的項(xiàng)目,本文主要介紹了Vue全局自定義指令Modal拖拽的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue組件間通信全面講解

    vue組件間通信全面講解

    這篇文章主要介紹了vue組件間通信全面講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評(píng)論

舒兰市| 平乡县| 三明市| 河北区| 高州市| 夹江县| 新巴尔虎左旗| 凤山市| 绥滨县| 哈密市| 定西市| 金坛市| 玉树县| 黑龙江省| 江源县| 绥江县| 甘肃省| 庆元县| 昂仁县| 莫力| 承德县| 漠河县| 新乐市| 海城市| 黎平县| 格尔木市| 衡水市| 盐山县| 玉林市| 武陟县| 和平县| 江阴市| 南投县| 年辖:市辖区| 双峰县| 永定县| 平山县| 新郑市| 顺平县| 靖西县| 遵化市|