前排警告,这不是玩具!
那、还能是啥呢
最近看到好多在Vue中使用JSX的文章,我虽然是Vue入门的,但是我对Vue的熟悉程度也只有几个V-指令和简单的传值传事件了。作为目前最受欢迎的MVVM框架,其实不学习还是有些对不住自己的。但是无奈太喜欢React,所以在Vue中能使用JSX还是能勾起很多人的好奇心的。
我就是,还有么
对于vue-cli3和4创建的Vue工程,是可以直接使用JSX语法的,简单的就是template删除了,写个render,其他的就和写React类组件差不多了。
吗?
还是没那么简单的,不过可以先看个简单的传值:
<script>
import HelloWorld from "@/components/HelloWorld.vue";
export default {
name: "home",
render() {
return <HelloWorld msg="this is helloworld" />;
}
};
</script>
<script>
export default {
name: "HelloWorld",
props: {
msg: String
},
render() {
return <div>{
this.msg}</div>;
}
};
</script>
<style scoped lang="less">
div {
margin: 40px;
}
</style>
如果上面的示例对你没什么难度,以React的角度来说。那么我们就来看一下加上Vue的角度的一些基本的东西:
<script>
import HelloWorld from "@/components/HelloWorld.vue";
export default {
name: "home",
data() {
return {
data: [12, 34, 56]
};
},
methods: {
handleClick() {
console.log(123);
}
},
render() {
return (
<div>
<button onClick={
this.handleClick}>click</button>
<HelloWorld msg="this is helloworld" />
<ul>
{
this.data.map(i => (
<li key={
i}>{
i}</li>
))}
</ul>
</div>
);
}
};
</script>
<HelloWorld msg="this is helloworld" handleClick={
this.handleClick} />
<script>
export default {
name: "HelloWorld",
props: {
msg: String,
handleClick: Function
},
render() {
return (
<div>
<button onClick={
this.handleClick}>click</button>
<div>{
this.msg}</div>
</div>
);
}
};
</script>
因为不会有React处理事件时解析语法this指向取消的问题,所以这里也不需要bind。
Vue的生命周期很条理:
这部分和JSX关系不大,这里不讲。
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<router-view />
</div>
App.vue同样可以做这样的修改,使得我们以JSX的方式引入路由。
同时我们也可以混用template和JSX。
只是简单的Demo,已经可以在迁移量不大的情况下做出一些东西了,后续会结合Vuex和Vue-router写点东西熟悉一下。