Render渲染函数-深入应用

雨点打透心脏的1/2处 2021-10-15 12:21 506阅读 0赞

渲染函数是vue中的一个非常重要的功能。基本在个性化的展示上都会使用到。所以需要对其有较为深入的理解才行。

之前写过一篇关于渲染的,算是基础。在随后的使用过程中,发现还需要更深入的理解。所以又做了新的总结。

渲染函数的作用:VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数。

关键点一:理解createElement:

  • Vue通过建立一个虚拟DOM对真实的DOM发生变化保存追踪。
  • createElement返回的是包含的信息会告诉VUE页面上需要渲染什么样的节点及其子节点。我们称这样的节点为虚拟DOM,可以简写为VNode

    1. createElement 参数
    2. // @return {VNode}
    3. createElement(
    4. // {String | Object | Function}
    5. // 1.一个HTML标签字符串,组件选项对象,或者一个返回值类型为String/Object的函数。该参数是必须的
    6. 'div',
    7. // {Object}
    8. // 2.一个包含模板相关属性的数据对象,这样我们可以在template中使用这些属性,该参数是可选的。
    9. { },
    10. // {String | Array}
    11. // 3.子节点(VNodes),由 createElement() 构建而成。或简单的使用字符串来生成的 "文本节点"。可选参数
    12. )

关键点二:理解data对象:

  1. {
  2. // 和`v-bind:class`一样的 API
  3. 'class': {
  4. foo: true,
  5. bar: false
  6. },
  7. // 和`v-bind:style`一样的 API
  8. style: {
  9. color: 'red',
  10. fontSize: '14px'
  11. },
  12. // 正常的 HTML 特性 - 属性
  13. attrs: {
  14. id: 'foo'
  15. },
  16. // 组件 props
  17. props: {
  18. myProp: 'bar'
  19. },
  20. // DOM 属性
  21. domProps: {
  22. innerHTML: 'baz'
  23. },
  24. // 事件监听器基于 `on`
  25. // 所以不再支持如 `v-on:keyup.enter` 修饰器
  26. // 需要手动匹配 keyCode。
  27. on: {
  28. click: this.clickHandler
  29. },
  30. // 仅对于组件,用于监听原生事件,而不是组件内部使用 `vm.$emit` 触发的事件。
  31. nativeOn: {
  32. click: this.nativeClickHandler
  33. },
  34. // 自定义指令。注意事项:不能对绑定的旧值设值
  35. // Vue 会为您持续追踪
  36. directives: [
  37. {
  38. name: 'my-custom-directive',
  39. value: '2',
  40. expression: '1 + 1',
  41. arg: 'foo',
  42. modifiers: {
  43. bar: true
  44. }
  45. }
  46. ],
  47. // Scoped slots in the form of
  48. // { name: props => VNode | Array<VNode> }
  49. scopedSlots: {
  50. default: props => createElement('span', props.text)
  51. },
  52. // 如果组件是其他组件的子组件,需为插槽指定名称
  53. slot: 'name-of-slot',
  54. // 其他特殊顶层属性
  55. key: 'myKey',
  56. ref: 'myRef'
  57. }

对应理解的实例

  1. render: (h,params)=>
  2. {
  3. // 可以组织一些下面需要使用的参数
  4. return createElement(
  5. //参数一:标签字符串-必选
  6. 'h' + this.level,
  7. //参数三:子节点(VNodes)由 createElement() 构建而成-可选参数
  8. [
  9. createElement(
  10. //参数一:标签字符串-必选
  11. 'a',
  12. //参数二:模板相关属性的数据对象-可选
  13. {
  14. attrs: {
  15. name: headingId,
  16. href: '#' + headingId
  17. },
  18. style: {
  19. color: 'red',
  20. fontSize: '20px'
  21. },
  22. 'class': {
  23. foo: true,
  24. bar: false
  25. },
  26. // DOM属性
  27. domProps: {
  28. innerHTML: 'baz'
  29. },
  30. // 组件props
  31. props: {
  32. myProp: 'bar'
  33. },
  34. // 事件监听基于 'on'
  35. // 所以不再支持如 'v-on:keyup.enter' 修饰语
  36. // 需要手动匹配 KeyCode
  37. on: {
  38. click: function(event) {
  39. event.preventDefault();
  40. console.log(111);
  41. }
  42. }
  43. }, this.$slots.default)
  44. ]
  45. )
  46. }

发表评论

表情:
评论列表 (有 0 条评论,506人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue渲染render

    一、宏观上展现了Vue整体流程: ![vue-render-1.jpg][]   Vue推荐在绝大多数情况下使用`template`来创建你的HTML。然而在一些场景中,