循環(huán)渲染對比、結(jié)合jsx

一针肥、table表格循環(huán)渲染

1.vue2.0中循環(huán)渲染表格并加 插槽

(1)將<el-table-column>標(biāo)簽的屬性定義為一個(gè)數(shù)組columns,循環(huán)渲染數(shù)據(jù)书幕。
(2)由于v-for和v-if不能作用在同一標(biāo)簽上,所以要用<template>包裹所有的<el-table-column>凡橱。
(3)循環(huán)渲染<<el-table-column>標(biāo)簽小作,并將需要添加插槽的單獨(dú)領(lǐng)出來。

    <el-table :data="tableData">
      <!-- 用template包裹table-column,不要把v-for和v-if寫到一個(gè)標(biāo)簽上 -->
      <template v-for="item in columns" :key="item.prop">
        <!-- 如果是要加插槽的需要單獨(dú)判斷 -->
        <el-table-column
          v-if="item.prop==='name'"
          :width="item.width"
          :label="item.label"
          :align="item.align"
        >
          <template v-slot="{row}">
            <div>
              {{row.name}}hahah
            </div>
          </template>
        </el-table-column>
        <!-- 不加插槽的循環(huán)渲染 -->
        <el-table-column
          v-else
          :prop="item.prop"
          :width="item.width"
          :label="item.label"
          :align="item.align"
        >
        </el-table-column>
      </template>
    </el-table>

const columns = [
  {
    prop: 'id',
    width: 120,
    label: 'ID',
    align: 'center',
  },
  {
    prop: 'name',
    width: 180,
    label: '機(jī)構(gòu)名稱',
  },
];

或者簡單來寫:

       <el-table-column
          v-for="item in columns"
          :key="item.prop"
          :prop="item.prop"
          :width="item.width"
          :label="item.label"
          :align="item.align"
          :sortable="item.sortable"
        >
          <template v-slot="{row}" v-if="item.prop==='name'">
            <div>
              這是自定義name:{{row.name}}
            </div>
          </template>
          <template v-slot="{row}" v-else-if="item.prop==='id'">
            <div>
              這是自定義id: {{row.id}}
            </div>
          </template>
        </el-table-column>
2.vue3.0結(jié)合jsx表格渲染 與 插槽的使用

(1)使用jsx語法稼钩,在<el-table>標(biāo)簽內(nèi)調(diào)用一個(gè)函數(shù)顾稀,函數(shù)返回值是<el-table-column>結(jié)構(gòu)。
(2)遍歷定義好的colums數(shù)組坝撑,循環(huán)渲染<el-table-columns>標(biāo)簽静秆。
(3)可以在<el-table-columns>標(biāo)簽的HTML結(jié)構(gòu)中使用jsx語法,判斷是否需要添加插槽巡李。
(4)使用jsx語法添加插槽抚笔,插槽內(nèi)容是一個(gè)回調(diào)函數(shù),函數(shù)返回值是要渲染的HTML結(jié)構(gòu)侨拦,函數(shù)參數(shù)可以將當(dāng)前行的數(shù)據(jù)傳遞給HTML結(jié)構(gòu)殊橙。
(5)函數(shù)返回值是一個(gè)函數(shù)子組件。

首先阳谍,在<el-table>標(biāo)簽內(nèi)放入一個(gè)函數(shù)蛀柴,返回值就是<el-table-column>結(jié)構(gòu)

        <el-table
          data={tableList}
          row-key="id"
        >
          {columnList()}
        </el-table>

遍歷columns循環(huán)渲染<el-table-column>,并區(qū)分哪些標(biāo)簽需要插槽

    const columnList = () => {
      return column.map((item) => (
        ['basic', 'account', 'org', 'dataScope', 'time'].includes(item.prop) ? 
        <el-table-column
            prop={item.prop} 
            width={item.width} 
            label={item.label} key={item.prop} 
            v-slots={(scope) => <ColumnItem prop={item.prop} {...scope.row}/>}
         />
          : 
          <el-table-column prop={item.prop} label={item.label} key={item.prop} align={item.align} />
      ));
    };

最后插槽使用函數(shù)子組件進(jìn)行渲染

const ColumnItem = (props) => {
  return <div>{props.prop}</div>;
}; 

二矫夯、vue3結(jié)合jsx

1.render()函數(shù)中使用this
2.插槽的使用注意點(diǎn)

(1)自定義插槽:如表格中的某列需要自定義內(nèi)容

① 用v-slots指定插槽內(nèi)容鸽疾,值為一個(gè) 函數(shù)。
② 函數(shù)的 參數(shù) 是當(dāng)前列的所有數(shù)據(jù) scope训貌,函數(shù) 返回值 是一個(gè) 函數(shù)式組件制肮。

<el-table-column v-slots={(scope) => <ColumnItem prop={item.prop} {...scope.row}/>
const ColumnItem = (props) => {
  return <div>{props.prop}</div>;
}; 

③ <el-table-column />標(biāo)簽可能是循環(huán)渲染的,因?yàn)槊恳涣卸加袑?yīng)的 prop屬性递沪;也有可能是單獨(dú)寫的豺鼻,比如最后一列的操作項(xiàng)。

              <el-table data={state.tableData} v-slots={state.tableSlots} onSortChange={sortChange} ref="tableRef">
                {initColumns()}
                <el-table-column label='操作' v-slots={(scope) => action(scope)}></el-table-column>
              </el-table>
    // 表格操作欄插槽
    const action = (scope) => 
<span className='button-link' style={{ cursor: 'pointer' }} onClick={() => actionHistory(scope)}>操作記錄</span>;

(2)有名字的插槽:如input框通過append插槽款慨,添加后綴內(nèi)容

① 用v-slots指定插槽內(nèi)容儒飒,值為一個(gè) 對象。
② key是插槽名檩奠,value是一個(gè)函數(shù)桩了,函數(shù)返回值就是插槽內(nèi)容附帽。

<el-input v-slots={slots} />
    const slots = {
      append: () => '.com',
    };
3. vue3結(jié)合jsx時(shí)的數(shù)據(jù)綁定

v-model綁定數(shù)據(jù)時(shí)用 "state.xxx" 的形式,不要直接 v-model={xxx} 井誉,否則可能會(huì)出現(xiàn)數(shù)據(jù)無法實(shí)現(xiàn)雙向綁定的bug蕉扮。

                <el-radio-group v-model={state.timeRadio} size="large" onChange={timeChange}>
                  <el-radio-button label='1' >近30天</el-radio-button>
                  <el-radio-button label='2' >近7天</el-radio-button>
                </el-radio-group>
4. 在jsx中使用props數(shù)據(jù)

1.setup()函數(shù)要接收props參數(shù)。
2.setup()函數(shù)要在return 中將props返回颗圣。
3.render()函數(shù)中在this中接收props喳钟。

5. 類名

1.在vue中使用jsx時(shí),類名用class 和 className 都不會(huì) 報(bào)錯(cuò)在岂,但是 className可能不生效奔则。
2.為單個(gè)元素添加多類名:<img className={tree-item ${item.id === state.orgId ? 'activeTreeItem' : ''}} />

6.vue 結(jié)合 jsx 的動(dòng)態(tài)表單校驗(yàn)

(1)動(dòng)態(tài)生成的表單的 校驗(yàn)規(guī)則 rules屬性,要單獨(dú)寫到<el-form-item>標(biāo)簽上洁段。
(2)重點(diǎn)是 prop屬性应狱,有特殊寫法共郭。

① 其中祠丝,state.followForm 是<el-form>綁定的表單對象。
state.followForm.url是一個(gè)數(shù)組除嘹,用來存放動(dòng)態(tài)生成的鏈接地址写半,數(shù)組元素就是 字符串。
prop屬性直接用 數(shù)組名 url(字符串) 加上 .index(動(dòng)態(tài)索引)尉咕。

const state = reactive({
   followForm: {
     url: ['', ''], // 存放鏈接的數(shù)組叠蝇,初始默認(rèn)有兩個(gè)輸入框
   },
})
<el-form model={state.followForm}>
 {
    state.followForm.url.map((item, index) => (
        <el-form-item 
           label="數(shù)據(jù)鏈接:"
           prop={`url.${index}`}  // 1.注意prop屬性的寫法。
           rules={{ required: true, message: '請輸入數(shù)據(jù)鏈接并以http開頭', trigger: 'blur' }}  // 2.校驗(yàn)規(guī)則單獨(dú)寫年缎。
         >
            <el-input
               v-model={state.followForm.url[index]} // 3.注意input框數(shù)據(jù)的綁定悔捶。
               onBlur={() => limitUrl(index)}
            />
         </el-form-item>
     ))
  }
</el-form>
7.vue結(jié)合jsx不再分<template></template>、<script></script>单芜、<style></style>標(biāo)簽蜕该。
import { defineComponent, reactive,  getCurrentInstance,} from 'vue';
import './index.scss';

export default defineComponent({
  setup() {
    const { proxy } = getCurrentInstance();
    const state = reactive({
      activeKey: 0, // 一級tab欄
    });
    // 一級tab欄切換
    const topTabsClick = (key, e) => { };
    return {
      state,
      typeChange,
    };
  },
  render() {
    const { state,typeChange } = this;
    return (
      <div className="data-analyse-wrapper" >
        <div class="yc-first-tabs">
          <div onClick={(e) => topTabsClick(0, e)}> 普通機(jī)構(gòu) </div>
        </div>
      </div>
    );
  },
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市洲鸠,隨后出現(xiàn)的幾起案子堂淡,更是在濱河造成了極大的恐慌,老刑警劉巖扒腕,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢淀,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘾腰,警方通過查閱死者的電腦和手機(jī)皆的,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹋盆,“玉大人费薄,你說我怎么就攤上這事内狗。” “怎么了义锥?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵柳沙,是天一觀的道長。 經(jīng)常有香客問我拌倍,道長赂鲤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任柱恤,我火速辦了婚禮数初,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梗顺。我一直安慰自己泡孩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布寺谤。 她就那樣靜靜地躺著仑鸥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪变屁。 梳的紋絲不亂的頭發(fā)上眼俊,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音粟关,去河邊找鬼疮胖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闷板,可吹牛的內(nèi)容都是我干的澎灸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼遮晚,長吁一口氣:“原來是場噩夢啊……” “哼性昭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹏漆,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤巩梢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后艺玲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體括蝠,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年饭聚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忌警。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖法绵,靈堂內(nèi)的尸體忽然破棺而出箕速,到底是詐尸還是另有隱情,我是刑警寧澤朋譬,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布盐茎,位于F島的核電站,受9級特大地震影響徙赢,放射性物質(zhì)發(fā)生泄漏字柠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一狡赐、第九天 我趴在偏房一處隱蔽的房頂上張望窑业。 院中可真熱鬧,春花似錦枕屉、人聲如沸常柄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽西潘。三九已至,卻和暖如春哥倔,著一層夾襖步出監(jiān)牢的瞬間秸架,已是汗流浹背揍庄。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工咆蒿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚂子。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓沃测,卻偏偏與公主長得像,于是被迫代替她去往敵國和親食茎。 傳聞我的和親對象是個(gè)殘疾皇子蒂破,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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