资讯专栏INFORMATION COLUMN

React 核心思想之声明式渲染

baiy / 765人阅读

摘要:模板北京时间数据渲染数据渲染将数据和模板绑定在渲染声明式渲染和普通模板不同的是,模板写在文件中,而不是的标签中。创建模板容器类北京时间渲染指令数据只用于存放可变的数据。北京时间通过算法计算如何更新视图。

React 发展很快,概念也多,本文目的在于帮助初学者理清 React 核心概念。

React 及 React 生态

React 的核心概念只有 2 点:

声明式渲染(Declarative)

基于组件(Component-Based)

声明式渲染 声明式与命令式

命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。

声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。

举例:

// 命令式关注如何做(how)

var numbers = [1,2,3,4,5]

var doubled = []

for(var i = 0; i < numbers.length; i++) {

  var newNumber = numbers[i] * 2
  doubled.push(newNumber)

}
console.log(doubled) //=> [2,4,6,8,10]

遍历整个数组,取出每个元素,乘以二,然后把翻倍后的值放入新数组,每次都要操作这个双倍数组,直到计算完所有元素。

// 声明式关注做什么(what)

var numbers = [1,2,3,4,5]

var doubled = numbers.map(function(n) {

  return n * 2
})
console.log(doubled) //=> [2,4,6,8,10]

map 函数所作的事情是将直接遍历整个数组的过程归纳抽离出来,让我们专注于描述我们想要的是什么(what)。

模板渲染

渲染:模板 => HTML => 页面视图

发生在服务器的叫后端模板渲染,公司用的是velocity

发生在客户端的叫前端模板渲染,常用的有 artTemplate。

artTemplate 为例。

模板

数据

渲染

setInterval(function() {
    // 数据
    var data = {
        date: new Date()
    };
    // 渲染(将数据和模板绑定在)
    var html = template("test", data);
    // 渲染
    document.getElementById("container").innerHTML = html;
},100)
React 声明式渲染

和普通模板不同的是,React 模板写在 JS 文件中,而不是 html 的

React 通过 diffing 算法计算如何更新视图。而 diffing 算法有个 的假设前提,开发人员会提供给长列表的每个子项一个 ID,帮助算法进行对比。

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    
  • {number}
  • ); return (
      {listItems}
    ); } const numbers = [1, 2, 3, 4, 5]; ReactDOM.render( , document.getElementById("root") );
    完成的渲染流程

    初始化的渲染流程分为 3 步。

    第一步,开发者使用 JSX 语法写 React,babel 会将 JSX 编译为浏览器能识别的 React JS 语法。这一步,一般配合 webpack 在本地进行。

    第二步,执行 ReactDOM.render 函数,渲染出虚拟DOM。

    第三步,react 将虚拟DOM,渲染成真实的DOM。

    页面更新的流程同样也是 3 步。

    第一步,当页面需要更新时,通过声明式的方法,调用 setState 告诉 react。

    第二步,react 自动调用组件的 render 方法,渲染出虚拟 DOM。

    第三步,react 会通过 diffing 算法,对比当前虚拟 DOM 和需要更新的虚拟 DOM 有什么区别。然后重新渲染区别部分的真实 DOM。

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

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

    相关文章

    • [译]React 元素 vs React 组件 vs 组件支撑实例

      摘要:元素和组件实例都不表示真实元素。我希望这篇文章能够帮助你理清这些术语参考资料翻译成支撑实例来自于理解中方法创建组件的声明式编程和命令式编程的比较对循环提示增加的研究精髓之一算法 本篇为译文,原文出处:React Elements vs React Components vs Component Backing Instances 许多人可能听说过 Facebook 的 React 库,...

      gnehc 评论0 收藏0
    • Vue + ArcGIS API for JavaScript 构建前端GIS应用(一)

      摘要:技术路线的选择技术学习内容汇总技术路线的选择项目的技术路线是使用构建一套前端应用,更加具体的技术路线实际上是,应用到了技术栈加上了最新版的。不管怎么说,以这次项目对的使用体验挺好。本次项目没有使用开源的要求,自然是最好的选择。 写这篇总结的意义:总结,回顾,反思项目进行过程和这套Vue + ArcGIS API for JavaScriptGIS前端应用技术路线,从项目与技术两个方面积...

      lufficc 评论0 收藏0
    • React Redux 中间件思想遇见 Web Worker 的灵感(附demo)

      摘要:写在最前原文首发于作者的知乎专栏中间件思想遇见的灵感附,感兴趣的同学可以知乎关注,进行交流。其中,最重要的一个便是对多线程的支持。在中提出了工作线程的概念,并且规范出的三大主要特征能够长时间运行响应理想的启动性能以及理想的内存消耗。 写在最前 原文首发于作者的知乎专栏:React Redux 中间件思想遇见 Web Worker 的灵感(附demo),感兴趣的同学可以知乎关注,进行交流...

      whatsns 评论0 收藏0
    • Js-函数式编程

      摘要:组合组合的功能非常强大,也是函数式编程的一个核心概念,所谓的对过程进行封装很大程度上就是依赖于组合。在理解之前,先认识一个东西概念容器容器为函数式编程里普通的变量对象函数提供了一层极其强大的外衣,赋予了它们一些很惊艳的特性。 前言 JavaScript是一门多范式语言,即可使用OOP(面向对象),也可以使用FP(函数式),由于笔者最近在学习React相关的技术栈,想进一步深入了解其思想...

      whinc 评论0 收藏0
    • 漫谈前端性能 突破 React 应用瓶颈

      摘要:表示调用栈在下一将要执行的任务。两方性能解药我们一般有两种方案突破上文提到的瓶颈将耗时高成本高易阻塞的长任务切片,分成子任务,并异步执行这样一来,这些子任务会在不同的周期执行,进而主线程就可以在子任务间隙当中执行更新操作。 showImg(https://segmentfault.com/img/remote/1460000016008111); 性能一直以来是前端开发中非常重要的话题...

      whlong 评论0 收藏0

    发表评论

    0条评论

    baiy

    |高级讲师

    TA的文章

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