前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode

简介: 前端框架原理自测题:根据 JSX / Vue 模板写出 render 函数 / VNode

JSX

<div className="container">
    <p onClick={onClick} data-name="p1">
        hello <b>{name}</b>
    </p>
    <img src={imgSrc}/>
    <MyComponent title={title}></MyComponent>
</div>

Vue 模板

<div class="container">
    <p @click="onClick" data-name="p1">
        hello <b>{{name}}</b>
    </p>
    <img :src="imgSrc"/>
    <my-component :title="title"></my-component>
</div>

render 函数

技术要点:

  • render 函数即 function render(){}
  • 返回值为 return h() 函数
  • h() 函数的第一个参数为标签、第二个参数为属性事件等组成的对象,第三个参数为子元素数组(用数组是因为子元素有顺序)
  • 标签自带的属性放 props 里(避开关键字 class ,改用 className)
        props: {
            className: 'container'
        },
  • 自定义数据属性放 dataset 里
            dataset: {
                name: 'p1'
            },
  • 事件放 on 里
            on: {
                click: onClick // 变量
            }
  • 子元素为纯变量时
[name]
  • 子组件的写法
h(MyComponent, { // MyComponent 变量
            title: title // 变量
        }, [ /* 无子节点*/ ])

最终答案

function render() {
    return h('div', {
        props: {
            className: 'container'
        },
    }, [
        // <p>
        h('p', {
            dataset: {
                name: 'p1'
            },
            on: {
                click: onClick // 变量
            }
        }, [
            'hello ',
            h('b', {}, [name]) // name 变量
        ])
        
        // <img>
        h('img', {
            props: {
                src: imgSrc // 变量
            }
        }, [ /* 无子节点*/ ])

        // <MyComponent>
        h(MyComponent, { // MyComponent 变量
            title: title // 变量
        }, [ /* 无子节点*/ ])
    ])
}

VNode

技术要点:

  • VNode 是一个对象
  • tag 属性是标签,值为字符串
  • props 属性是标签的属性,值为对象
  • children 属性是子元素,值为数组
  • 原生标签属性(避开关键字 class ,改用 className)
className: 'container'
  • 自定义属性用
dataset: {
    name: 'p1'
},
  • 事件用
on: {
    click: onClick // 变量
}
  • 子元素为纯文本时
'hello ',
  • 属性为空也要写
props: {},
  • 子组件写法
{
    tag: MyComponent, // 变量
    props: {
        title: title // 变量
    },
    children: [ /* 无子节点*/ ]
}

最终答案

const vnode = {
    tag: 'div',
    props: {
        className: 'container'
    },
    children: [
        // <p>
        {
            tag: 'p',
            props: {
                dataset: {
                    name: 'p1'
                },
                on: {
                    click: onClick // 变量
                }
            },
            children: [
                'hello ',
                {
                    tag: 'b',
                    props: {},
                    children: [name] // name 变量
                }
            ]
        },

        // <img>
        {
            tag: 'img',
            props: {
                src: imgSrc // 变量
            },
            children: [ /* 无子节点*/ ]
        },

        // <MyComponent>
        {
            tag: MyComponent, // 变量
            props: {
                title: title // 变量
            },
            children: [ /* 无子节点*/ ]
        }
    ]
}

目录
相关文章
|
3天前
|
前端开发 JavaScript 应用服务中间件
windows server + iis 部署若伊前端vue项目
5,配置url重写规则(重写后端请求) 注:如果没有Application Request Routing Cachefourcloudbdueclaim和URL重写,则是第二部的那两个插件没装上 打开iis,点击计算机->点击Application Request Routing Cache -> 打开功能
17 0
|
3天前
|
JavaScript 前端开发 网络架构
文本,展现到文章的面前,Vue结合v-for实现传参的方法,好的资料,Vue实现动态绑定,数据放到前端页面上
文本,展现到文章的面前,Vue结合v-for实现传参的方法,好的资料,Vue实现动态绑定,数据放到前端页面上
|
2月前
|
Web App开发 缓存 前端开发
前端性能优化的整理笔记(一)
前端性能优化的整理笔记(一)
116 0
|
11天前
|
前端开发 JavaScript 数据库
如何实现前后端分离-----前端笔记
如何实现前后端分离-----前端笔记
|
11天前
|
前端开发 安全 NoSQL
技术笔记:Security前端页面配置
技术笔记:Security前端页面配置
|
1月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
32 2
|
2月前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
54 1
|
2月前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
|
2月前
|
前端开发 容器
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)
45 2
|
2月前
|
移动开发 前端开发 JavaScript
CSS选择器 前端开发入门笔记(十)
CSS选择器 前端开发入门笔记(十)
32 1

热门文章

最新文章