React 是一个专注于 UI(View)的 JavaScript 函式库(Library)。
它有以下特点:
- 声明式编程
React的设计贯彻了声明式编程(Declarative Programming)的思想。声明式按字面理解就是你告诉程序说一句话,程序就知道就下来怎么做了,比如说渲染一个dom操作,直接ReactDOM.render(),然后react就替我们渲染了,至于怎么渲染的就不关我们的事了,所以声明式编程很明显就减少了我们的工作,而且语义化程度也更高了,看到一个render就知道它是一个渲染操作;而命令式编程与声明式编程刚好相反,当我们想用jq渲染一个dom操作,我们得思考渲染dom的命令,然后一步步执行下去,比如创造一个dom元素,选中一个父元素,然后将dom元素插入到父元素中。很明显,声明式编程更加轻松。
- 基于组件化创造应用
前端在组件化这条路走了好久,从最开始的面向对象思想组件,运用面向对象思想封装组件,比如jq插件等等,到后来的mvc架构创造的组件,对于组件来说可以减轻拼装html的逻辑部分,将这一部分解耦出去,解决了数据与界面耦合的问题,,这时候利用模板引擎可以在一定程度上实现组件化,不过这种组件化实现的还是字符串拼接级别的组件化,直到这几年的Angular,我们看到了在HTML上定义指令的方式,而近年来w3c组织才将类似的思想制定了规范,称为 Web Components
;它通过定义自定义元素的方式统一组件。每个自定义元素可以定义自己对外提供的属性、方法还有事件,内部可以向写一个页面一样,专注于实现功能完成对组件的封装。React组件即为组件元素,组件元素被描述为纯粹的json对象,意味着组件可以使用方法和类来创建。React组件基本上由三个部分组成-属性(props)、状态(state)、以及生命周期方法。React组件可以接受参数,也可能有自身状态。一旦接收到的参数或者自身状态有所改变,React组件就会执行相应的生命周期方法,最后渲染。整个过程完全符合传统组件所定义的组件职责。react把app的构建抽象成了组件中的组合和嵌套,我们只需像搭建积木一样合理使用组件就能打造我们心目中的app
- 学习一次,随处可写
为什么有这个特点呢?不知道有没有人思考过,有人会说,因为还有React Native,那么有人思考过为什么react既可以写网页又可以写app呢?不知道有没有人思考过ReactDOM为什么不是从React获得的,而是从react-dom里获得的,为什么不都放在react里面呢?这其实都跟React的虚拟dom有关。当我们拿到一个表示 UI 的结构和信息的对象以后(也就是jsx,后面会讲),不一定会把元素渲染到浏览器的普通页面上,我们有可能把这个结构渲染到 canvas 上,或者是手机 App 上。所以这也是为什么会要把 react-dom 从react里单独抽离出来的原因,可以想象有一个叫 react-canvas 可以帮我们把 UI 渲染到 canvas 上,或者是有一个叫 react-app 可以帮我们把它转换成原生的 App(实际上这玩意叫 ReactNative);有了这样一个对象,当数据变化,需要更新组件的时候,就可以用比较快的算法操作这个 JavaScript 对象,而不用直接操作页面上的 DOM,这样可以尽量少的减少浏览器重排,极大地优化性能。
声明:以上文章皆是本人的学习笔记,有些大量参考了别人的文章,如若喜欢,建议直接观看原文,这些文章不一定适合你,这只是我自己做的学习笔记。
参考链接:
网友评论