美文网首页
组建开发选择-React

组建开发选择-React

作者: xx_Shen | 来源:发表于2015-07-29 15:35 被阅读218次

先讲故事:周一同事给我看了新页面的原型,有大量新增的表单。也就是说,会有相当数量的dom操作。众所周知,用js去生成dom性能是相当差的。怎么来实现需求的同时提升性能呢? 找小强讨论--用React!

漫谈

  • 现在最红的几个前端框架是什么?AngularJs?Backboon?ReactJs?对,他们都算是当红炸子鸡。都是用来实现模块化、自动化双向数据绑定、语义化标签。

  • 于是,为什么我选React?Backboon第一个被排除,对他是这个领域的鼻祖。然并卵,他老了,且很久没跟新了,最根本的内存泄漏问题始终没有解决。
    AngularJS,唔嗷~ 很抱歉我没用过这货,尽管它扩展性非常强,但是他的学习曲线太陡峭了,而且这次我们仅仅是为了解决动态dom性能的问题,AngularJS太庞大了。

  • 我们并不是说React的功能不强大,要知道React是从最早的UI引擎变成了一整套前后端通吃的 Web App 解决方案。终极目标是用web app的方式去写native app~ 然后我们只要写一次ui,就同时能在服务区 浏览器和手机上看啦~

  • 回归主题,React生成dom为毛性能那么好?根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。有兴趣可以了解下,当然你也别来问我,我是拾人牙慧,算法什么的我完全不懂。

搞起

  • 明确下我们只搞浏览器端!好了 搞~

  • 标准代码格式

<!DOCTYPE html>
<html>
<head>
<script src="../build/react.js"></script>
<script src="../build/JSXTransformer.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/jsx">
xx帅帅嗒
</script>
</body>
</html>

script 标签的 type 属性为 text/jsx 。这是因为 React 独有的 JSX 语法,跟 JavaScript 不兼容。凡是使用 JSX 的地方,都要加上 type="text/jsx" 

- React 提供两个库: react.js 和 JSXTransformer.js ,它们必须首先加载。其中,JSXTransformer.js 的作用是将 JSX 语法转为 JavaScript 语法。这一步很消耗时间,实际上线的时候,应该将它放到服务器完成。这个我倒最后再讲。下面我们就写个demo

- ```
<!DOCTYPE html>
<html>
  <head>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/jsx">
      React.render(
        <h1>Hello, Rex!</h1>,
        document.getElementById('example')
      );
    </script>
  </body>
</html>

啊发现有什么特别~ 跟传统js相比jsx语法允许直接写html标签,不需要引号~

<!DOCTYPE html>
<html>
  <head>
    <script src="../build/react.js"></script>
    <script src="../build/JSXTransformer.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/jsx">
      var names = ['Rex', 'xx', 'Sxx'];
      React.render(
        <div>
        {
          names.map(function (name) {
            return <div>Hello, {name}!</div>
          })
        }
        </div>,
        document.getElementById('example')
      );
    </script>
  </body>
</html>

这个demo说明把jsx语法解释的更清楚,遇到<开头的html标签就用html来解析,遇到{开头的用js规则解析。

var arr = [
  <h1>Hello world!</h1>,
  <h2>Rex is superman</h2>,
];
React.render(
  <div>{arr}</div>,
  document.getElementById('example')
);

如果数组里的对象像这个demo一样是html结构的话,将会直接被输出

var LikeButton = React.createClass({
  getInitialState: function() {
    return {liked: false};
  },
  handleClick: function(event) {
    this.setState({liked: !this.state.liked});
  },
  render: function() {
    var text = this.state.liked ? 'like' : 'haven\'t liked';
    return (
      <p onClick={this.handleClick}>
        You {text} this. Click to toggle.
      </p>
    );
  }
});
React.render(
  <LikeButton />,
  document.getElementById('example')
);

getInitialState 方法用于定义初始状态,也就是一个对象,这个对象可以通过 this.state 属性读取。当用户点击组件,导致状态变化,this.setState 方法就修改状态值,每次修改以后,自动调用 this.render 方法,再次渲染组件

警告!

  • 昨天回去尝试写demo,发现出问题了,搞了好久~ 问题出在0.13版更新之后提供了对ES6的支持。并且取消了了函数自动绑定。用新版React去跑我demo的同学,xx在这里给你道歉了~举例:
<button onClick={this.handleSubmit}>Submit</button>

需要改写成

<button onClick={this.handleSubmit.bind(this)}>Submit</button>

未完待续

相关文章

  • 组建开发选择-React

    先讲故事:周一同事给我看了新页面的原型,有大量新增的表单。也就是说,会有相当数量的dom操作。众所周知,用js去生...

  • React组建

    复合组建

  • react

    creat-react-app react/script start 定义组建 function heoo(){}...

  • React Native 第三方组件之--多媒体类

    react-native-camera 相机组件 ???? react-native-video 视频组建 ???...

  • [react]读《React全栈》(一)

    最近在学习react,我选择读的书是《React全栈》-redux+flux+webpack+babel整合开发。...

  • React_组建

    这次我们来学习React中的组件。组件是React的核心。 根据React官网的介绍,组件可以将UI切分成一些独立...

  • React初探

    1.基本开发环境 选择 reate-react-app或 create-react-app-antd 2.搭建路由...

  • [React-Native]React-Native for A

    React-Native for Android(一):开发环境搭建 概述 软件开发中,选择怎样的开发工具是很重要...

  • 剖析RN中的index.ios.js文件

    首先把React引入进来,然后从'react'中把{ Component }(组建/模块)引入进来; 从'reac...

  • React 父子组建生命周期

    React 父子组建生命周期 React 和 ReactNative 是亲兄弟,都是 facebook的儿子,只不...

网友评论

      本文标题:组建开发选择-React

      本文链接:https://www.haomeiwen.com/subject/xgimqttx.html