Props
傳遞參數(shù)
/src/Demo.vue
子組件
<script>
export default {
props: ["msg"],
render() {
return (
<div>
<p>子組件</p>
<p>msg: {this.msg}</p>
</div>
);
}
};
</script>
/src/App.vue
父組件
<script>
import Demo from "./Demo";
export default {
data() {
return {
msg: "default"
};
},
render() {
return (
<div>
<p>父組件</p>
<hr />
<Demo msg={this.msg} />
</div>
);
}
};
</script>
使用JSX
編寫之后,你會發(fā)現(xiàn)以上對比以前的寫法,好像缺少了components
這個配置項郭脂。
是的,JSX上你完全不用配置compoents
,直接寫上去就行鳄袍,這是我比較喜歡的
以上簡單的參數(shù)傳遞(單向綁定)想必大家都能懂,但如何實現(xiàn)雙向綁定呢吏恭?
綁定事件
src/App.vue
父組件
<script>
import Demo from "./Demo";
export default {
data() {
return {
msg: "default"
};
},
methods: {
handleOnInput(e) {
// 子組件 input的事件回調(diào)
// 實現(xiàn) 改變msg值
this.msg = e.target.value;
}
},
render() {
return (
<div>
<p>父組件</p>
<p>msg: {this.msg}</p>
<hr />
<Demo msg={this.msg} handleChange={this.handleOnInput} />
</div>
);
}
};
</script>
<Demo handleChange={ this.handleOnInput} />
子組件的handleChange
props值與父組件 handleOnInput
綁定
/src/Demo.vue
子組件
<script>
export default {
props: ["msg", "handleOnChange"],
render() {
return (
<div>
<p>子組件</p>
<p>msg: {this.msg}</p>
<!--onInput被觸發(fā)時拗小,交由父組件事件處理-->
<input value={this.msg} onInput={this.handleChange} />
</div>
);
}
};
</script>
props:["handleOnChange"]
事件必須要配置
<input onInput={this.handleChange} />
當(dāng)輸入框觸發(fā)onInput
事件時,交由父組件的事件處理
其實JSX
雙向綁定就是從原生事件中獲取到值之后賦值到對應(yīng)的變量中樱哼,從而達(dá)到v-model的效果
傳遞組件
/src/components/HelloWorld.vue
export default {
render() {
return (
<div>Hello</div>
);
}
}
/src/Demo.vue
export default {
props: ["component"],
render(h) {
return (
<div>
<p>子組件</p>
<!--父組件傳入來的組件-->
{ h(this.component) }
</div>
);
}
}
/src/App.vue
import HelloWorld from './components/HelloWorld'
import Demo from './Demo'
export default {
render(h) {
return (
<div>
<p>父組件</p>
<!--向子組件傳入組件-->
<Demo component={HelloWorld} />
</div>
);
}
}
通過props
方式哀九,把一個組件傳入到子組件中渲染
利用render(h)
的h
實現(xiàn)渲染
v-for 循環(huán)
在JSX中,循環(huán)得使用array.map()的方式來
<script>
export default {
data() {
return {
data: [
{
title: 1
},
{
title: 2
}
]
};
},
render() {
return (
<div>
<ul>
{
this.data.map(item => {
return <li>{ item.title }</li>
})
}
</ul>
</div>
);
}
};
</script>
v-if 判斷
三元運算 方式一
<script>
export default {
data() {
return {
isTrue: true,
};
},
render() {
const msg = this.isTrue ? '你中獎了' : '很遺憾搅幅,沒中'
return (
<div>
中獎情況:{ msg }
</div>
);
}
};
</script>
三元運算 方式二
<script>
export default {
data() {
return {
isTrue: true,
};
},
render() {
return (
<div>
中獎情況:{ this.isTrue ? '好' : 'no' }
</div>
);
}
};
</script>
樣式綁定
style方式
主要在標(biāo)簽上 使用{...{}}
進(jìn)行綁定
<script>
export default {
data() {
return {
backgroundColor: 'blue',
styleObject: {
backgroundColor: 'red',
fontSize: '20px',
color: '#fff'
}
};
},
render() {
return (
<div>
<span {...{
style: {
backgroundColor: this.backgroundColor
}
}}>我是藍(lán)色背景</span>
<span {...{
style: this.styleObject
}}>我是紅色背景</span>
</div>
);
}
};
</script>
class 方式
<script>
export default {
data() {
return {
isBlue: true,
classOjbect: ['red']
};
},
render() {
return (
<div>
<span {...{
class: {
blue: this.isBlue,
}
}}>我是藍(lán)色背景</span>
<span {...{
class: this.classOjbect
}}>我是紅色背景</span>
</div>
);
}
};
</script>
<style>
.blue {
background: blue
}
.red {
background: red
}
</style>
Attrs 綁定
常用的動態(tài)id
阅束、data-*
賦值
<script>
export default {
data() {
return {
};
},
render() {
return (
<div>
<span {...{
attrs: {
'id': 'app',
'data-id': '1234'
}
}}>我是藍(lán)色背景</span>
</div>
);
}
};
</script>
結(jié)果: <span id="app" data-id="1234">我是藍(lán)色背景</span>