海南省旅游专业网站发展电子商务缺乏强大的专业产业资源做后盾,网站建设子栏目怎么弄,婚纱摄影网页模板,精准营销的概念是什么1.1认识h函数#xff08;hyperscript工具 基于JavaScript编写模板的工具#xff09; Vue推荐在绝大多数情况下使用模板来创建你的HTML#xff0c;然后一些特殊的场景#xff0c;需要JavaSript的完全编程能力#xff0c;可以使用渲染函数#xff0c;它比模板更接近编译器hyperscript工具 基于JavaScript编写模板的工具 Vue推荐在绝大多数情况下使用模板来创建你的HTML然后一些特殊的场景需要JavaSript的完全编程能力可以使用渲染函数它比模板更接近编译器VNode和VDOM的生成Vue在生成真实的DOM之前会将我们的节点转换成VNode而Vnode组合在一起形成一棵树结构就是虚拟DOM(VDOM)编写template中的html最终也是使用渲染函数生成对应的VNode;可以利用JavaScript的编程能力我们可以自己来编写createdVnode函数生成对应的VNodeh函数创建VNode的一个函数更准备命名的是createdVnode函数,为了简便在Vue中简化为h函数注意事项如果没有props那么通常可以将children作为第二个参数传入如果会产生歧义可以将null作为第二个参数传入将children作为第三个参数传入1.2.h函数在render中的基本用法
// 基本用法
scriptimport { h } from vue;export default {render () {return h(h2,{ class: title }, Hello Render)}}
/script1.3.setup函数中返回VNode
scriptimport { ref, h } from vue;export default {setup(){ // setup可以返回render函数可以替代掉render函数const counter ref(100);return () {return h(div,{ class: app }, [h(h2,null, 当前计数${ counter.value }),h(button,{ onClick: () counter.value }, 1),h(button,{ onclick: () counter.value-- }, -1)])}},// render () { // 可以使用this去拿数据因为render函数内部是绑定了this// return h(div,{ class: app }, [// h(h2,null, 当前计数${this.counter}),// h(button,{ onClick: () this.counter }, 1),// h(button,{ onclick: () this.counter-- }, -1)// ])// }}
/script
1.4.render函数中使用插槽
script// 父组件import { ref, h } from vue;import HelloWorld from ./HelloWorld.vueexport default {// setup中的return对象怎么放进render函数中// 不是放进去对this做了一个代理 例如取this.counter的时候proxy(, setupData里面去找这个数据然后依次是data/ctx/props)render(){ // setup可以返回render函数可以替代掉render函数return (div, null, [h(HelloWorld, null, {default: props h(h2, null,我是App的插槽${props.name}) })])},}
/script
script
// 子组件
import { h } from vueexport default {render () {return h(div, null, [h(h2, null, hello world),this.$slots.default ? this.$slots.default({ name: coderwhy }) : h(h2, null, 我是helloworld默认的插槽)])}}
/script2.1 JSX基本用法 JSX是一种JavaScript的语法扩展首先运用于React中其格式比较像是模版语言但事实上完全是在JavaScript内部实现的。 jsx的babel配置在项目中使用jsx那么我们需要添加对jsx的支持jsx通常通过babel来进行转换(React编写的jsx就是通过babel转换的)对于Vue,只需要在babel中配置对应的插件即可babel(工具)jsx - render h()script langjsximport { ref } from vueimport HelloWorld from ./HelloWorld.vue// 父组件export default {setup () {const counter ref(0)return {counter,}},render() {const increment () this.counterconst decrement () this.counter--return (// 下面jsx的html会通过babel转化成h函数divh2当前计数{ this.counter }/h2button onClick{ increment }1/buttonbutton onClick{ decrement }-1/buttonHelloWorld { {default: props button onClick{ increment }我是按钮/button } }/HelloWorld/div)}}
/scriptscript langjsx
// 子组件export default {render () {return (divh2Hello World/h2{ this.$slots.default? this.$slots.default() : 哈哈哈哈 }/div)}}
/script