资讯专栏INFORMATION COLUMN

鹅厂优文 | ReactJS一点通

ziwenxie / 569人阅读

摘要:于是好处显而易见,并非每修改一次组件的,就会重新渲染一次,而是在结束后做一次计算,减少冗余的操作。基于上述的两点,很自然的就获得一部分开发者的青睐。

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由鹅厂新鲜事儿发表于云+社区专栏

作者:卢文喆 腾讯云 UI工程师

导语 | 当React 刚开始红的时候,一直觉得 JSX 的设计思想极其独特,属于革命性的创新,它性能出众,代码逻辑却非常简单,所以,受到很多开发者的关注和使用,认为它可能是将来 Web 开发的主流工具。

React 最早起源于 Facebook 的一个内部项目,因为公司对现有的 JavaScript MVC 框架都不满意,就决定自己开发一套,用来架设 Instagram 的网站。开发完成后,发现这套东西很好用,就在2013年5月开源了。

那么 React 优势在哪里呢?

首先:虚拟 DOM,在 DOM 树的状态需要发生变化时,虚拟 DOM 机制会将同一Event loop前后的 DOM树进行对比,如果两个 DOM 树存在不一样的地方,那么 React 仅仅会针对这些不一样的区域来进行响应的 DOM 修改,从而实现最高效的 DOM 操作和渲染。

比如,我们修改了 DOM 树上一些节点或 UI 组件对应绑定的 state,React 会即刻将其标记为“脏状态”,在一个 Event loop 结束时,React 会计算得出 DOM 树上需要修改的地方及其最终的状态,并仅仅针对这些地方进行一次性的重新渲染。

于是好处显而易见,并非每修改一次组件的 state,就会重新渲染一次,而是在 Event loop 结束后做一次计算,减少冗余的 DOM 操作。另外 React 只针对需要修改的地方来做新的渲染,而非重新渲染整个 DOM 树,自然效率很高。

其次:组件可嵌套,而且,可以模版化 —— 其实在 React 里提及的“组件”,常规是一些可封装起来、复用的 UI 模块,可以理解为“带有细粒度UI功能的部分DOM区域”。然后我们可以把这些组件层层嵌套起来使用,当然这样组件间会存在依赖关系。

至于模块化,类似于 ejs 那样可以作为独立的模块被引用到页面上来复用,它可以直接把 UI 组件当作脚本模块那样来使用,完全可以配合 CommonJS、AMD、CMD 等规范来 require 需要的组件模块,并处理好它们的依赖关系。

基于上述的两点,React 很自然的就获得一部分开发者的青睐。不过在这之前得先理清两件事情:

1. React 是一个纯 View 层,不擅长于和动态数据打交道,因此它不同于,也替代不了常规的框架;

2. React 很擅长于处理组件化的页面,在页面上搭组件的形式有点像搭积木一样,因此用上React的项目需求常规为界面组件化。

简单点说,React组件应该具有如下特征:

(1)可组合(Composeable):一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。如果一个组件内部创建了另一个组件,那么说父组件拥有它创建的子组件,通过这个特性,一个复杂的UI可以拆分成多个简单的 UI 组件;

(2)可重用(Reusable):每个组件都是具有独立功能的,它可以被使用在多个UI场景;

(3)可维护(Maintainable):每个小的组件仅仅包含自身的逻辑,更容易被理解和维护;

组件化一直是网页开发的利器,许多开发者最希望能够最大程度的重复使用过去的开发的组件,避免重复造轮子。在 React 中组件就是一切,前端开发可能需要花点时间转变思维,尤其过去我们往往习惯将 HTML 、CSS 和 JavaScript 分离,现在却要把它们都封装在一起。

以下是一般 React Component 书写的主要两种方式:

1.使用 ES6 的 Class

//  注意组件首字母需要大写
class MyComponent extends React.Component {
    // render 是 Class based 元件唯一必須的方法(method)
    render() {
        return (
            
Hello, World!
); } } // 將 组件插入 id 為 app 的 DOM 元素中 ReactDOM.render(, document.getElementById("app"));

2.使用 Functional Component 写法

// 使用 arrow function 来设计 Functional Component 让 UI 设计更便捷,避免互相干扰(side effect)
const MyComponent = () => (
    
Hello, World!
); // 將 组件插入 id 為 app 的 DOM 元素中 ReactDOM.render(, document.getElementById("app"));

前面说到 React 有独有的 JSX 语法,那么到底什么是 JSX 呢?

JSX在ECMAScript的基础上提供了类似于XML的扩展。 JSX和HTML有点像,但也有不一样的地方。例如,HTML中的class属性在JSX中 为className。其他不一样的地方,你可以参考FB的HTML Tags vs. React Components 这篇文章。

但是由于浏览器原生并不支持JSX,因此我们需要将其编译为JS,有很多方法能够 完成这个任务,后面我们会提到这些方法。此外,Babel也能够讲JSX编译为JS。

一些参考资料:

JSX in depth

Online JSX compiler

Babel: How to use the react transformer

一般而言 JSX 通常有两种使用方式:

1.使用 browserify 或 webpack 等 CommonJS bundler 并整合 babel 预处理

2.在浏览器端做解析

请大家注意JSX的语法书写方式:



  
    
    Hello React!
    
    
    
    
  
  
    

一般载入 JSX 方式有:

內嵌

从外部引入

     

总结:以上都是我对 React 简单的了解,包括 React 的优势、组件化的特征、React Component 的方法、以及 React 中为何要使用 JSX,以及 JSX 基本概念和用法。在 React 里,所有的事物都是以 Component 为基础,通常会将同一个 Component 相关的资源放在一起,而在撰写 React Component 时我们常会使用 JSX 的方式来提升书写效率。 JSX 是一种语法类似 XML 的 ECMAScript 语法扩充,可以发挥 JavaScript 的强大能力,放弃蹩脚的模板语言。当然 JSX 并非强制使用,你也可以选择不用,因为最终 JSX 的内容都会转化成 JavaScript。

以上就是对 React 入门的部分理解。

问答
如何扩展React.js组件?
相关阅读
AI从入门到放弃:CNN的导火索,用MLP做图像分类识别?
开发效率太低?您可能没看这篇文章
微信车票背后的设计故事
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

此文已由作者授权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98109.html

相关文章

  • Python 工匠:善用变量来改善代码质量

    摘要:变量用的好或不好,和代码质量有着非常重要的联系。简而言之,匈牙利命名法就是把变量的类型缩写,放到变量名的最前面。很多情况下,使用匈牙利命名法是个不错的主意,因为它可以改善你的代码可读性,尤其在那些变量众多同一类型多次出现时。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么?...

    seanHai 评论0 收藏0
  • Python 工匠:编写条件分支代码的技巧

    摘要:系列文章工匠善用变量改善代码质量序言编写条件分支代码是编码过程中不可或缺的一部分。而进行条件分支判断时用到的也是这个值重点来了,虽然所有用户类实例的布尔值都是真。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』,因为优雅而高效的代码...

    KaltZK 评论0 收藏0
  • es6语法的reactjs的state状态和组件间props传递的实践

    摘要:目前只是体会到组件之间传递的值的初始来源一般都是值,可能是实践不够的原因。。。此时,可以建一个组件内部封装一个构造函数,内部封装三个方法。 PS:开头的一段废话        想起一个月前还不知道reactjs该如何下手的而今天有点小体会,还是有点小欣慰,不过回望一些走过的坑和开始时的满头浆糊觉得还是有点恐怖的。今天分享一点实践中的小心得给新手朋友们。 reactjs的es6语法形式 ...

    malakashi 评论0 收藏0

发表评论

0条评论

ziwenxie

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<