组建开发选择-React

2015-07-29  本文已影响218人  xx_Shen

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

漫谈

搞起

<!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 方法,再次渲染组件

警告!

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

需要改写成

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

未完待续

上一篇 下一篇

猜你喜欢

热点阅读