Skip to content

Vue 中 JSX 语法踩坑记录

v-bind、v-on

js
<div v-bind="this.$attr" v-on="this.$listeners"></div>

// JSX语法中

<div {...{ attrs: $attrs, on: $listeners }}></div>

组件使用.sync 语法糖传递参数时(比如 element 的 el-dialog 组件会使用:visible.sync="dialogVisible"

html
// template的sync语法糖:
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
      <span>内容</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="confirmUnbind">确 定</el-button>
      </span>
</el-dialog>

// template非语法糖
<el-dialog title="提示" :visible="dialogVisible" @update:visible = "val => this.dialogVisible = val"  width="30%">

// JSX 这么写
<el-dialog title="提示" visible={this.dialogVisible} {...{on:{'update:visible': val => this.dialogVisible = val}}} width="30%">
    <span>内容</span>
    <span slot="footer" class="dialog-footer">
        <el-button onClick={()=>...}>取 消</el-button>
        <el-button type="primary" onClick={xxx函数名}>确 定</el-button>
    </span>
</el-dialog>

v-popover.popover 指令

html
// .vue
<el-select v-popover.popover></el-select>

// JSX

<el-select {...{
	directives:[
		{ name : 'popover' , modifiers : { popover : true }}
	]
}}></el-select>

v-html

html
<div v-html="htmlCom"></div>

<div { ...{ domProps:{ innerHTML : htmlCom } } }></div>

slot 相关

html
// template
<el-tooltip ref="tooltip" v-bind="tooltipProps">
    <div slot="content"></div>
</el-tooltip>

// JSX

<el-tooltip ref="tooltip" v-bind="tooltipProps">
    <div {
    	...{
    		slot:'content'
    	}
    }></div>
</el-tooltip>

v-model 相关

html
// template
<el-input v-model="input">
  <div slot="content"></div>
</el-input>

// JSX

<el-input>
  <div slot="content"></div>
</el-input>

上次更新: