• 初识vue渲染函数-rander


    render官方介绍

    • 类型(createElement: () => VNode) => VNode

    • 详细

      字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode

      如果组件是一个函数组件,渲染函数还会接收一个额外的 context 参数,为没有实例的函数组件提供上下文信息。
      Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

    通过简单的描述可以看到渲染函数的特殊性,首先来了解一下vue渲染

    Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。这时你可以用渲染函数,它比模板更接近编译器。

    如果是比较简单的逻辑,使用templateel比较好,而使用自定义render函数相当于人已经将逻辑翻译给程序,能够胜任复杂的逻辑,灵活性高,但对于用户的理解相对差点。

    可以看到我们直接跳过了 el 和 template ,可以直接拿到 render函数 ,相当于我们一直使用的是 封装好的组件,而现在我们可以直接改写源码

    语法

    1. Vue.component('anchored-heading', {
    2. render: function (createElement) {
    3. return createElement ( createElement参数 )
    4. },
    5. props: {},
    6. methods: {}
    7. })

    参数

    1. // @returns {VNode}
    2. createElement(
    3. // {String | Object | Function}
    4. // 一个 HTML 标签名、组件选项对象,或者
    5. // resolve 了上述任何一种的一个 async 函数。必填项。
    6. 'div',
    7. // {Object}
    8. // 一个与模板中 attribute 对应的数据对象。可选。
    9. {
    10. // (样式,绑定事件,等等行内选项)
    11. },
    12. // {String | Array}
    13. // 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
    14. // 也可以使用字符串来生成“文本虚拟节点”。可选。
    15. [
    16. '先写一些文字',
    17. createElement('h1', '一则头条'),
    18. createElement(MyComponent, {
    19. props: {
    20. someProp: 'foobar'
    21. }
    22. })
    23. ]
    24. )

    现在就可以理解vue官方给的例子了

    1. Vue.component('title-head', {
    2. render: function (createElement) {
    3. return createElement(
    4. 'h' + this.level, // tag name 标签名称
    5. this.$slots.default // 插槽
    6. )
    7. },
    8. props: {
    9. level: {
    10. type: Number, // 参数
    11. required: true
    12. }
    13. }
    14. })

    在页面中使用

    1. <div class="box">
    2. <title-head :level="1">123123123123123123title-head>
    3. div>

     绑定简单的点击事件

    1. Vue.component('title-head', {
    2. render: function(createElement) {
    3. return createElement(
    4. 'h' + this.level, // tagname标签名称
    5. {
    6. on: {
    7. click: this.log
    8. }
    9. },
    10. this.$slots.default // 子组件中的阵列
    11. )
    12. },
    13. props: {
    14. level: {
    15. type: Number,
    16. required: true
    17. }
    18. },
    19. methods: {
    20. log() {
    21. console.log(this.level)
    22. }
    23. },
    24. })

     

     

  • 相关阅读:
    精通Nmap:网络扫描与安全的终极武器
    简单工厂模式~
    带你了解如何防御DDoS攻击
    使用consul作为istio的注册中心(intree or by service entry)
    肖sir__mysql之navicat安装__003
    【数据结构】测试1 绪论
    【CKA考试笔记】十八、StatefulSet
    交易想简化分析并少失误,波浪原则anzo capital认为必不可少
    Day29_10 JavaWeb之Servlet域对象、request及response
    大数据之LibrA数据库常见术语(五)
  • 原文地址:https://blog.csdn.net/paidaboluo/article/details/126470835