• JSX

    JSX

    如果你写了很多 render 函数,可能会觉得下面这样的代码写起来很痛苦:

    1. createElement(
    2. 'anchored-heading', {
    3. props: {
    4. level: 1
    5. }
    6. }, [
    7. createElement('span', 'Hello'),
    8. ' world!'
    9. ]
    10. )

    特别是对应的模板如此简单的情况下:

    1. <anchored-heading :level="1">
    2. <span>Hello</span> world!
    3. </anchored-heading>

    这就是为什么会有一个 Babel 插件,用于在 Vue 中使用 JSX 语法,它可以让我们回到更接近于模板的语法上。

    1. import AnchoredHeading from './AnchoredHeading.vue'
    2. new Vue({
    3. el: '#demo',
    4. render: function (h) {
    5. return (
    6. <AnchoredHeading level={1}>
    7. <span>Hello</span> world!
    8. </AnchoredHeading>
    9. )
    10. }
    11. })

    h 作为 createElement 的别名是 Vue 生态系统中的一个通用惯例,实际上也是 JSX 所要求的。从 Vue 的 Babel 插件的 3.4.0 版本开始,我们会在以 ES2015 语法声明的含有 JSX 的任何方法和 getter 中 (不是函数或箭头函数中) 自动注入 const h = this.$createElement,这样你就可以去掉 (h) 参数了。对于更早版本的插件,如果 h 在当前作用域中不可用,应用会抛错。

    要了解更多关于 JSX 如何映射到 JavaScript,请阅读使用文档。