什么是React?
React是Facebool在2011年开发的js库 它遵循基于组件的方法,有助于构建可复用的UI组件 它用于开发复杂和交互式的Web和UI 尽管是在2015年开源,但有一个很大的支持社区
React有什么特点?
React的主要功能如下: 1.它使用虚拟Dom而不是真实的Dom 2.它可以进行服务器端渲染 3.他遵循单向数据流或数据绑定
列出React的一些主要优点
1.它提高了应用的性能 2.可以方便地在客户端和服务端使用 3.由于JSX,代码的可读性很好 4.使用React,编写UI测试用例变得非常容易
什么是JSX?
JSX 是J avaScript XML 的简写。是 React 使用的一种文件,它利用 JavaScript 的表现力和类似 HTML 的模板语法。这使得 HTML 文件非常容易理解。此文件能使应用非常可靠,并能够提高其性能。下面是JSX的一个例子:
render(){
return(
<div>
<h1> Hello World from Edureka!!</h1>
</div>
);
}
什么是Props?
Props是React中属性的简写,它们是只读组件,必须保持纯。意思就是不可以改变,它们总是在整个应用中从父组件传递到子组件。子组件永远不能将 prop 送回父组件。这有助于维护单向数据流,通常用于呈现动态生成的数据。
详细解释React组件的生命周期方法
1.componentWillMount() 在渲染之前执行,在客户端和服务端都会执行
2.componentDidMount()仅在第一次渲染后在客户端执行
3 componentReceiveProps()在父类接到props并且在调用另一个渲染器之前调用
4.shouldComponentUpdate() 根据特定条件返回true,false.如果你希望更新组件,请返回true否则返回 false,默认情况下,他返回false。 5.componentWillUpdate()在DOM中渲染之前调用
6.componentDidUpdate()在渲染发生后立刻调用
7.componentWillUnmount()从DOM中卸载组件后调用。用于清理内存空间。
图片懒加载和预加载
图片懒加载的原理就是暂时不设置图片的src属性,而是将图片的url隐藏起来,比如先写在data-src里面,等某些事件触发的时候(比如滚动到底部,点击加载图片)再将图片真实的url放进src属性里面,从而实现图片的延迟加载
图片预加载是指在一些需要展示大量图片的网站,实现图片的提前加载。从而提升用户体验。常用的方式有两种,一种是隐藏在css的background的url属性里面,一种是通过javascript的Image对象设置实例对象的src属性实现图片的预加载。
AMD和CMD
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.
CMD 推崇依赖就近,AMD 推崇依赖前置。
AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,没有全局 require,而是根据模块系统的完备性,提供 seajs.use 来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。
浅拷贝 和 深拷贝
拷贝其实就是对象复制,为了解决对象复制是产生的引用类型问题
浅拷贝:利用迭代器,循环对象将对象中的所有可枚举属性复制到另一个对象上,但是浅拷贝的有一个问题就是只是拷贝了对象的一级,其他级还如果是引用类型的值的话依旧解决不了
深拷贝:深拷贝解决了浅拷贝的问题,利用递归的形势便利对象的每一级,实现起来较为复杂,得判断值是数组还是对象;
总结
【浅拷贝】 只是增加了一个指针,指向已存在对象的内存。
【深拷贝】 是增加了一个指针,并新开辟了一块空间,让指针指向这块新开辟的空间。
【浅拷贝】 在多个对象指向一块空间的时候,释放一个空间会导致其他对象所使用的空间也被释放了,再次释放便会出现错误
Promise的理解
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件监听——更合理和更强大。Promise 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。但是无法获取到pending状态,在promise中接受两个内置参数分别是resolve(成功)和reject(失败),Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。then方法可以传递两个回调函数第一个是成功,第二个是失败,失败回调也可以使用promise的catch方法回调,promise还有一个强大的功能那就是all方法可以组合多个promise实例,包装成一个新的 Promise 实例。
介绍一下async和await
async 会将其后的函数(函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。
async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案。目前async / await 在 IE edge中已经可以直接使用了,但是chrome和Node.js还没有支持。幸运的是,babel已经支持async的transform了,所以我们使用的时候引入babel就行。在开始之前我们需要引入以下的package,preset-stage-3里就有我们需要的async/await的编译文件。