jQuery,Vue,React补充几个知识点

一.react与jquery对比

1.数据和视图分离 2.以数据驱动视图

react与vue对比

组件化:react mvvm: vue

二. 说一下对组件化的理解

1.组件的封装 2.组件的复用

组件的封装:视图,数据,变化逻辑(数据驱动视图变化)

组件的复用:props传递,复用

三.JSX本质是什么

JSX语法,JSX解析成JS,独立的标准

JSX语法:html形式,引入JS变量和表达式,if…else,循环,style和className,事件

JSX语法,如何在浏览器运行?

//React.createElement 参数说明:tag,attr,child

React.createElement(‘div’,{id:’div1’},child1,child2,child3)

React.createElement(‘div’,{id:’div1’},[])

JSX解析

JSX其实是语法糖,开发环境会将JSX编译成JS代码,JSX的写法大大降低了学习成本和编码工作量,同时,JSX会增加debug成本

JSX独立的标准

JSX是React引入的,但不是React独有的;

React已经将它作为一个独立标准开放,其他项目也可用

React.createElement是可以自定义修改的

说明:本身功能已经完备;和其他标准兼容和扩展性没有问题。

四.JSX与Vdom之间的关系

为何需要vdom:JSX需要渲染成html,数据驱动视图

React.createElement和h,都能生成vnode

何时patch:ReactDOM.render(…)和setState

自定义组件的解析:初始化实例,然后执行render

五.说一下React setState的过程

setState的异步,vue修改属性也是异步的,setState的过程

setState为何需要异步?

可能会依次执行多次setState,你无法规定、限制用户如何使用setState;没必要每次setState都重新渲染,考虑性能;即便是每次重新,用户也看不到中间的效果;只看到最后的效果即可。

vue的整个实现流程

第一步:解析模板成render函数;第二步,响应式开始监听,第三步,首次渲染,显示页面,且依赖绑定,第四步,data属性变化,触发render.

setState的过程

每个组件实例,都有renderComponent方法(继承自Component实例的方法)

执行renderComponent会重新执行实例的render

render函数返回newVnode,然后拿到preVnode,

执行patch(preVnode,newVnode)

六.阐述自己对React和Vue的认识(开放题)

两者的本质区别:Vue本质是MVVM框架,又MVC发展而来;React本质是前端组件化框架,由后端组件化发展而来。但这并不妨碍它们两者都能实现相同的功能。

看模板和组件化的区别:vue使用模板(最初由angular提出),react使用JSX;模板语法,我更倾向于JSX,模板分离,我更倾向于vue

两者的共同点:都支持组件化,都是数据驱动视图(数据和视图分离)

总结问题答案:国内使用,首选vue。文档更易读、易学、社区够大。如果团队水平较高,推荐使用React。组件化和JSX

前言:

技术选型没有绝对的对与错,技术选型要考虑的因素非常多。

作为面试者,你要有自己的主见。和面试官的观点不一致没关系,只要能说出理由。

七.hybrid

移动端占大部分流量,已经远远超过PC;

一线互联网公司都有自己的App;

这些App中有很大比例的前端代码;

1.什么是hybrid,为何用hybrid?

hybrid是客户端和前端的混合开发,存在的意义在于快速迭代,无需审核。hybrid实现流程图,以及webview和file协议。

hybrid即混合,即前端和客户端的混合开发;需要前端开发人员和客户端开发人员共同配合完成;某些环节也可能涉及到sever端,PS:不要以为自己是前端就可以不理会客户端的知识。

hybrid存在价值:可以快速迭代更新(关键)(无需app审核,思考为何?);体验流畅(和NA的体验基本类似);减少开发和沟通成本,双端共用一套代码。

webview:是app中的一个组件(app中可以有webview,也可以没有)。用于加载h5页面,即一个小型的浏览器内核。

file协议:加载本地文件等的协议。本地文件,快,变态快。http(s)协议:网络加载,慢。“协议”和“标准”很重要!!!

具体实现:不是所有场景都适合使用hybrid;使用NA,体验要求极致,变化不繁琐(如头条的首页);使用hybrid:体验要求高,变化繁琐(如头条的新闻详情页);使用h5,体验无要求,不常用(如举报,反馈等页面)

前端做好静态页面(html,js,css),将文件交给客户端;客户端拿到静态页面,以文件形式存储在app中;客户端在一个webview中;使用file协议加载静态页面。

2.app发布之后,静态文件如何实时更新?静态页面如何获取内容?

要替换每个客户端的静态文件,只能客户端来做(客户端是我们开发的),客户端去server下载最新的静态文件,我们维护sever端的静态文件。

静态页面如何获取内容:不能使用ajax获取。第一个跨域,第二速度慢。客户端获取新闻内容,然后js通讯拿到内容,再渲染

3.介绍一下hybrid更新和上线流程?

分版本,有版本号,如20190630123015

将静态文件压缩成zip包,上传到服务端

客户端每次启动,都去服务端检查版本号

如果服务端版本号大于客户端版本号,就去下载最新的zip包

下载后解压,然后将现有文件覆盖。

要点1:服务端的版本和zip包维护 要点2:更新zip包前,先对比版本号 要点3:下载zip包解压缩,覆盖原来的文件。

4.hybrid和h5的主要区别?

优点:体验更好,和NA的体验基本类似,快速更新迭代,无需app审核

缺点:开发成本高。联调,测试,查bug都比较麻烦;运维成本高。参考此前的上线流程。

场景:hybrid,产品的稳定功能,体验要求高,迭代频繁。h5,单次的运营活动(如xx红包)或不常用功能。

5.前端js和客户端如何通讯?

6.js和客户端通讯的基本形式?

js访问客户端能力,传递参数和回调函数;客户端通过回调函数返回内容。

7.schema协议简介和使用

协议:http,https,http2,tcp/ip,socket,file,schema,ssh

八.vue和jquery区别

1.数据和视图分离,解耦(开放封闭原则) 2.以数据驱动视图,只关心数据变化,DOM操作被封封装

说一下对MVVM的理解

MVVM - Modle View ViewModel

Model数据,对应data

View视图,对应template的html标签

ViewModles数据模型,作为连接View和Model之间的桥梁

九.vue三要素

响应式 1. 关键是理解Object.defineProperty,获取属性get,赋值属性set 2.将data的属性代理到vm上

模板解析 模板是什么 render函数 render函数与vdom

模板是什么,本质:字符串;有逻辑,如v-if v-for等;与html格式很像,但有很大区别;最终还要转换为html来显示;模板最终要转换成js代码,因为:有逻辑(v-if v-for),必须用js才能实现(图灵完备);转换为html渲染页面,必须用js才能实现;因此,模板最终要转换成一个js函数(render函数)。

渲染

render函数-with用法

《js语言精髓》