Vue中使用JSX语法。可以让我们回到更接近模板的语法上。
render () {
return (
<h1>这是一个标题</h1>
)
}
<div>{
this.value }</div>
在JSX中,一些指令并不存在,所以我们可以换一种方式来处理。
<div domPropsTextContent="i am a p
">div>
<div domPropsInnerHTML="i am a p
">div>
jsx支持v-show指令:
<div v-show={this.show}>div>
{true && <div>divdiv>}
{true ? <div>divdiv> : <span>spanspan>}
{ [1, 2, 3].map(item => (<div key={item}>{ item }div>))}
<button onClick={this.handleClick}>点击事件button>
<button on-click={this.handleClick}>点击事件button>
<cmp-button nativeOnClick={this.handleClick}>原生点击事件cmp-button>
<input value={this.value} />
在JSX中可以直接使用class="xx"来指定样式类,内联样式可以直接写成style=“xxx”
<div class="a b" style="font-size: 12px;">Contentdiv>
<div class={
{a: true, b: false}}>Contentdiv>
<div style={
{color: 'red', fontSize: '14px'}}>Contentdiv>
有相应的插件 支持 v-model,所以可以直接使用:
<input type="text" v-model={this.value} />
<my-cmp>
默认插槽
<div slot="a">具名插槽 adiv>
my-cmp>
以上三个指令,不常用,无替代方案
<div ref="xxx">xxxdiv>
当遍历元素或组件时,如:
[1, 2, 3].map(item => <div ref="xx" key={
item }>{
item }</div>)
会发现从 this.$refs.xxx 中获取的并不是期望的数组值,此时就需要将refInFor属性设置为true了:
[1, 2, 3].map(item => <div ref="xx" refInFor={
true} key={
item}>{
item }</div>)
render () {
// 1
return (
<input v-splice={
{
value: this.value, modifiers: {
number: true }}}/>
)
// 2
const directives = [
{
name: 'splice',
value: this.value,
modifiers: {
number: true }
}
];
return (
<div {
...{
directives} }></div>
)
}
<div>{
{ msg | capitalize }}div>
<div>{ this.$options.filters('capitalize')(this.msg)}div>
模板写法:
<div class="demo">
<slot name="header">slot>
<slot>slot>
div>
<my-cmp>
default
<template v-slot:header>headertemplate>
my-cmp>
JSX写法:
<div class="demo">
{ this.$slots.header }
{ this.$slots.default }
div>
<my-cmp>
default
<template slot="header">headertemplate>
my-cmp>
作用域插槽:
模板写法:
<div class="demo">
<slot :text="'HelloWorld'">slot>
div>
<my-cmp v-slot="slotProps">
{
{ slotProps.text }}
my-cmp>
JSX写法:
<div class="demo">
{
this.$scopedSlots.default({
text: 'HelloWorld',
})
}
div>
<div id="app">
props.text
},
}}>base-demo>
div>