VUE的进阶理解之render函数

由于我是学的VUE,因此进行项目开发的时候肯定是组件化的,所以在理解render函数和组件之间的关系时,常常会表示不理解,我一开始也一样。以下是我对于render函数的一个学习过程。
1.render函数的参数请参照文档,不多说
createElement(
参数1:(string | object | function) 一个标签或组件选项或函数
参数2:(object) 一个对应属性的数据对象
参数3:(string | array) 子节点vnodes
)
2.子组件使用render函数后vue模板需要删除template部分内容,否则不会进行渲染。这就意味着,如果想要进行父子组件的挂载使用,那么子组件的.vue文件需要将template删除。
3.规定:所有的组件树中,如果VNnode是组件或含有组件的slot,那么VNode必须唯一
4.关于重复渲染子节点问题(解决上述问题)

  • 定义一个子组件tem6,使用render渲染方法
  • 导入父组件
  • 在父组件的render函数中使用数组方法Array.applay(null,{length:5}).map(()=> retrun createElement(tem6))
  • 如果只是重复一次:Array.apply(null,{length:1}).map(() => createElement(tem6))
  • 但是值得注意的是,如果不是重复渲染的方式,那么就需要在外部先创建子节点,然后将子节点作为createElement的第三个参数,也能实现子组件的挂在

*以下三个问题可以统称为在render函数中书写JS代码
5.如何理解render函数中的v-if
给定一个判断条件,一般为父组件传递过来的值,在render函数中,使用if-elseif-else来判断返回的createElement的模板

if (this.show) {
          return createElement('p','the value of show is true')
    } else {
        return createElement('p','the value of show is false')
    }

6.如何理解render函数中的v-for
由父组件给定的数组或对象array,在render函数中创建一个节点数组nodes,循环遍历并对array的每一项返回一个createElement,最后将这个节点数组作为render函数的第三个参数即可

var nodes = []
    for (var i=0;i<this.list.length; i++) {
        nodes.push(createElement('p',this.list[i]))
    }
    retrun createElement('div',nodes)

7.如何理解render函数中的v-model
在返回的createElement中,给其子节点返回一个input节点,并给该节点添加domProps属性value,以及事件 input的on事件

var _this = this
    retrun createElement('div',[
        createElement('input',{
            domProps: {
                value: this.value
            },
            on: {
                input: function(event) {
                    _this.value = event.target.value
                })
            }
        }),
        createElement('p','value:' + this.value)
    ])

8.render函数和JSX的差异
JSX是一种看起来像HTML,但实际上是JS的语法扩展,他用更接近DOM结构的形式来描述了一个组件的UI和状态信息。render函数的每一个createElement层级对应一个标签,同时第二个参数给该标签添加样式、属性和事件 等,第三个参数确定其子节点。而JSX在在render函数中返回一个HTML,并将render需要设置属性、key、类、方法等添加至html的标签上,而子节点则防止标签内部,形成div中嵌套div的形式。
**以上代码块源自vue书中第9章,有兴趣的可以去复习下

第二次补充
1.组件的基本运行模式
一个组件分为数据和视图,数据更新的时候,视图也会自动更新。在视图中可以绑定一些事件,他们触发 methods里指定的方法,从而可以改变数据、更新视图。
2.什么是vuex
在组件开发的过程中,难免遭遇跨组件共享数据的需求,虽然有组件传值、中央事件bus,但是还是不够。因此vuex的设计就是用来统一管理组件的状态,它定义了一些列规范来使用和操作数据,使组件应用高效在数据的管理、维护和架构设计上显得更加高效优雅。
**三个注意点
*改变store中的数据的唯一途径就是显示的提交mutations
this. s t o r e . c o m m i t ( ′ 方 法 名 ′ , 数 字 / 字 符 串 / 对 象 等 ) ∗ 但 是 呢 , m u t a t i o n 里 尽 量 不 要 进 行 异 步 操 作 数 据 , 因 为 c o m m i t 后 数 据 不 会 立 即 改 变 , 因 此 会 造 成 数 据 缺 失 , 异 步 操 作 数 据 在 a c t i o n s 中 , a c t i o n 里 提 交 m u t a t i o n , 并 且 可 以 异 步 操 作 业 务 逻 辑 ∗ g e t t e r s 用 于 操 作 保 存 的 数 据 的 方 法 , 相 当 于 将 所 有 需 要 对 s t a t e 数 据 进 行 加 工 的 方 法 进 行 提 取 3. 解 释 v u e x 如 何 通 过 状 态 管 理 对 视 图 层 的 管 理 ? v u e x 的 s t a t e 中 保 存 数 据 c o u n t , 视 图 层 通 过 使 用 store.commit('方法名',数字/字符串/对象等) *但是呢,mutation里尽量不要进行异步操作数据,因为commit后数据不会立即改变,因此会造成数据缺失,异步操作数据在actions中,action里提交mutation,并且可以异步操作业务逻辑 *getters用于操作保存的数据的方法,相当于将所有需要对state数据进行加工的方法进行提取 3.解释vuex如何通过状态管理对视图层的管理? vuex的state中保存数据count,视图层通过使用 store.commit(,//)mutationcommitactionsactionmutationgettersstate3.vuex?vuexstatecount使store.state.count进行数据展示。而视图层通过按钮button,并绑定事件add,向actions发送dispatch方法,该方法在actions中定义,而该方法又通过commit方法最终向mutation发起请求,最后完成数据的修改。actions在其中充当中间层的作用,在异步加载数据的时候十分有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值