前端之React实战-背景概述

Introduction

ScreenShot

React并非一个完整的MVC或者MVVM框架,它与Angular也是负责不一样的方面,它最大的功能是提供一个高效的视图层。React提供了一些新颖的概念、库和编程原则让你可以同时在服务端和客户端编写快速、紧凑、漂亮的代码来构建你的web应用。若是你使用React,那么可能会涉及到一些经常使用的概念或技术,包括:javascript

  • ES6 Reactjava

  • 虚拟DOM(virtual DOM)react

  • 组件驱动开发(component-driven development)git

  • 不变性(immutability)github

  • 自上而下的渲染(top-down rendering)web

  • 渲染路径和优化算法

  • 打包工具, ES6, 构建请求, debugging, 路由等编程

  • 同构React(isomorphic React)浏览器

在具体的React实践中,考虑到纯粹的UI或者UX设计人员,他们可能只会将CSS与HTML进行组合,换言之,大量的赋值仍是会放置在HTML而非JSX中,建议仍是能够运用jQuery+React或者Angular+React的方式。性能优化

Virtual Dom

如咱们所知,在浏览器渲染网页的过程当中,加载到HTML文档后,会将文档解析并构建DOM树,而后将其与解析CSS生成的CSSOM树一块儿结合产生爱的结晶——RenderObject树,而后将RenderObject树渲染成页面(固然中间可能会有一些优化,好比RenderLayer树)。这些过程都存在与渲染引擎之中,渲染引擎在浏览器中是于JavaScript引擎(JavaScriptCore也好V8也好)分离开的,但为了方便JS操做DOM结构,渲染引擎会暴露一些接口供JavaScript调用。因为这两块相互分离,通讯是须要付出代价的,所以JavaScript调用DOM提供的接口性能不咋地。各类性能优化的最佳实践也都在尽量的减小DOM操做次数。

而虚拟DOM干了什么?它直接用JavaScript实现了DOM树(大体上)。组件的HTML结构并不会直接生成DOM,而是映射生成虚拟的JavaScript DOM结构,React又经过在这个虚拟DOM上实现了一个 diff 算法找出最小变动,再把这些变动写入实际的DOM中。这个虚拟DOM以JS结构的形式存在,计算性能会比较好,并且因为减小了实际DOM操做次数,性能会有较大提高。

virtual dom

React渲染出来的HTML标记都包含了data-reactid属性,这有助于React中追踪DOM节点。

单向数据流

在React中,应用利用State与Props对象实现单向数据流的传递。换言之,在一个多组件的架构中,某个父类组件只会负责响应自身的State,而且经过Props在链中传递给本身的子元素。

/** @jsx React.DOM */

var FilteredList = React.createClass({
  filterList: function(event){
    var updatedList = this.state.initialItems;
    updatedList = updatedList.filter(function(item){
      return item.toLowerCase().search(
        event.target.value.toLowerCase()) !== -1;
    });
    this.setState({items: updatedList});
  },
  getInitialState: function(){
     return {
       initialItems: [
         "Apples",
         "Broccoli",
         "Chicken",
         "Duck",
         "Eggs",
         "Fish",
         "Granola",
         "Hash Browns"
       ],
       items: []
     }
  },
  componentWillMount: function(){
    this.setState({items: this.state.initialItems})
  },
  render: function(){
    return (
      <div className="filter-list">
        <input type="text" placeholder="Search" onChange={this.filterList}/>
      <List items={this.state.items}/>
      </div>
    );
  }
});

var List = React.createClass({
  render: function(){
    return (
      <ul>
      {
        this.props.items.map(function(item) {
          return <li key={item}>{item}</li>
        })
       }
      </ul>
    )  
  }
});

React.render(<FilteredList/>, document.getElementById('mount-point'));

[React

相关文章
相关标签/搜索