官网:https://github.com/vuejs/jsx#installation

v-mode

<template>   <el-input v-model.trim="inputValue"/></template>
// 形式1:export default {render(){           return(                  <el-input vModel_trim={inputValue}/>          )    }}// 形式2:export default {       render(){                return(      <el-input           value={this.inputValue}          onInput={val => this.inputValue = val.trim()}/>   )       }}

v-if

<template>    <div v-if="user.age > 18">      Welcome, {{user.name}}    </div></template>
export default { methods: {        checkStatement(){     if (this.user.age > 18) {                      return <div> Welcome, { this.user.name }</div>;     }       }    },    render(){         return(                {this.checkStatement()}             )      }}

v-for

<template> <div v-for="item in items" :key="item.id">     {{ item }}  </div></template>
render(){ return( {  this.items.map(item => {   return (  <div> {item} </div>)  })}

v-on 事件绑定

<template> <button v-on:click="handleButtonClick()"> click me</button></template><script>export default { methods: {   handleButtonClick(e){     e.preventDefault();     alert('button clicked')   } },  }</script>
export default { methods: {  handleButtonClick(){            e.preventDefault();          alert('button clicked')  } },   render(){    return(     <div>      // 不传值       <button onClick={this.handleButtonClick}> click me</button>      // 须要传值      <button onClick={this.re.bind(this, args)}> click me</button>     // 须要传值       <button {...onClick: {this.re.bind(this, args)}}> click me</button>     </div>    ) }}

事件绑定修饰符: 修饰符须要本人在代码中实现。或者能够应用修饰符简写,对照官网的语法, jsx写法为

<template> <button v-on:click.stop="handleButtonClick()"> click me</button></template><script>export default { methods: {  handleButtonClick(e){    e.preventDefault();    alert('button clicked') } },  }</script>
export default { const handleButtonClick =   function(){        e.preventDefault();      alert('button clicked') } render(){  return(   <input {...{      on: {       '!click': () => this.doThisInCapturingMode,        '~keyup': () => this.doThisOnce,          '~!mouseover': () => this.doThisOnceInCapturingMode   }}} />  ) }}

v-html

<template> <div v-html="rawHtml"> </div></template><script> export default { data () {  return {        rawHtml: "<h1> This is some HTML </h1>",      } }}</script>
 export default { data(){  return{   rawHtml: "<h1> This is some HTML </h1>",  } },   render(){  return(   <div>    <div domPropsInnerHTML={this.rawHtml}> </div>   </div>  ) }}

引入组件

<template>   <div>    <NewComponent/>  </div></template><script>import NewComponent from "NewComponent.vue";export default {  components:{           NewComponent,  },}</script>
import NewComponent from 'NewComponent.vue'render(){  return(     <div> <NewComponent/></div>    )}

props传值

// 父组件<template>   <childCompents  :diunilaomu="445646">   </childCompents></template>// 子组件<template>   <div>  {{diunilaomu}} </div></template><script>export default { props:{  diunilaomu:{   type: Number,   default: 0  } }}</script>
render(){ return(    <childCompents  diunilaomu="2131231"><button>  )}

高阶组件中的v-on="$listeners"和v-bind="$attrs"

<template>   <div v-bind="$attrs" v-on="$listeners">   </div></template>
const data = { props: {             ...$attrs,             otherProp: value,  }, on: {              ...$listeners,           click() {     }, }}render(){ return(    <button { ...data }><button>  )}

slot写法

默认插槽模板写法

<template>  <button>  <slot></slot></button></template>
 ....  render(){ return( <button>    {this.$scopedSlots.default()}</button> )}

具名插槽模板写法

<template>   <button>      <slot name="before"></slot>  <slot></slot> </button></template>
 render(){    let before = '';if (this.$scopedSlots.before) {          before = this.$scopedSlots.before(props => props.text);}return( <button>     { before } {this.$scopedSlots.default()}</button>  )}

作用域插槽模板写法1

<template>  <button>     <div slot="file" slot-scope="{file}">  ----做点啥--- </div></button></template>
render(){    const slotScope = {          scopedSlots: {             file: (props = {}) => {       // 这个值就是file        props.file    },  },    }; return( <button  scopedSlots={scopedSlots}>   </button> )}         

指令

作用域插槽实例: 饿了么table template 如何转换成jsx
<template>    <div v-qq>  </div></template>
import NewComponent from 'NewComponent.vue'render(){  const directives = [  { name: 'my-dir', value: 123, modifiers: { abc: true } }]  return(   <div directives ={directives }/>   ) }

参考资料

  • Vue中应用JSX
  • vue的jsx写法记录
  • 优雅应用el-table组件
  • vue的jsx写法记录