react.js入门笔记

react.js使用jsx语法,script标签的type值必须为“text/jsx“!
在jsx语法中遇到HTML标签(以<开头),就用HTML规则解析;遇到代码块(以{开头),就用js规则解析。
JSX 允许直接在模板插入 JavaScript 变量。如果这个变量是一个数组,则会展开这个数组的所有成员。
数组:
var arr = [
    <span>hello</span>,
    <span>world</span>
];
ReactDOM.render(
     <div>{arr}</div>,
     document.getElementById(“example")
)
输出:
<div><span>hello</span><span>world</span></div>
 
ReactDOM.render是React的基本方法,用于将模板转为HTML,并插入指定的DOM节点:(第一个参数为模板,第二个参数为dom对象)
ReactDOM.render(
     <h1>Hello, world!</h1>,
     document.getElementById(‘example')
)
 
React.createClass是React创建组件的方法,组件标签必须首字母大写, 组件中包含:
    1. this.props对象,用来获取属性值, {…this.props}用来复制组件的所有属性,如:         
var CheckLink = React.createClass({
     render: function() {
          // 这样会把 CheckList 所有的 props 复制到 <a>
          return <a {...this.props}>{'√ '}{this.props.children}</a>;
     }
});
 
ReactDOM.render(
     <CheckLink href="/checked.html" target="_blank">
          Click here!
      </CheckLink>,
      document.getElementById('example')
);
 
可以使用结构赋值的方式传递属性:        
var FancyCheckbox = React.createClass({
      render: function() {
            var {checked, ...other} = this.props;
            var fancyClass = checked ? 'FancyChecked' : 'FancyUnchecked';
            return (
              <div className={fancyClass} {...other}>
                {this.props.children}
              </div>
            );
      }
});
React.render(
     <FancyCheckbox checked={true} name="myname" onClick={console.log.bind(console)}>
            Hello world!
     </FancyCheckbox>,
     document.getElementById('example')
);

这里的...other会包含checked属性外的其他(name, onClick)属性

     2.this.props.children用来获取标签内的所有子节点
     3.propTypes对象用来验证组件实例的属性,如:      
var MyTitle = React.createClass({
      propTypes: {
             title: React.PropTypes.string.isRequired, 
      },
      render: function() {
            return <h1>{this.props.title}</h1>; 
      } 
})

这里验证title属性的值必须存在,且必须是字符串,否则在控制台给出警告!

     4.getDefaultProps方法用来设置组件属性的默认值:
var Mytitle = React.createClass({
      getDefaultProps : function() {
          return {
               title : 'hello world'
          };
      },
 
      render: function() {
           return <h1>{this.props.title}</h1>;
       }
})
 
ReactDOM.render(
      <Mytitle title="haha" />,
      document.getElementById('example')
)
     
  5.ref用来获取真实的DOM:  
var MyForm = React.createClass({
      myClick: function() {
           this.refs.myInput.focus();
      },
      render: function() {
          return (
              <div>
                    <input type="text" ref="myInput" />
                    <input type="button" value="click" onClick={this.myClick} />
               </div>
           )
     }
})
     
  6.this.state,用来改变组件的状态,以便和用户交流,getInitialState方法用于定义初始状态,返回一个对象!这个对象可以通过this.state属性读取!
var MyTest = React.createClass({
      getInitialState: function() {
           return {
                stated: true
           }
      },
      myClick: function() {
            this.setState({stated : !this.state.stated});
      },
      render: function() {
            var text = this.state.stated ? 'yes, I can!' : 'no, I can\'t';
            return (
                  <div>
                        <span>Can you speak English?</span>
                        <input type="button" value="回答" onClick={this.myClick} />
                        <div>{text}</div>
                   </div>
            )
      }
})
 
ReactDOM.render(
       <MyTest />,
       document.getElementById('example')
)

(由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。 )表单的值需要通过this.state+onchange获取操作:

var MyForm = React.createClass({
      getInitialState: function() {
            return {
                  value: ''
            }
      },
      myChange: function(e) {
              var value = e.target.value, 
                    value = /^\d*$/.test(value) ? value : '';
               this.setState({value: value});
      },
      render: function() {
             var value = this.state.value;
             return (
                   <div>
                        <input type="text" value={value} onChange={this.myChange} />
                        请填写电话号码!
                        <div>{value}</div>
                    </div>
            )
      }
})
 
二.组件的生命周期
组件的生命周期分为三个状态:
     Mounting: 已插入真实DOM
     Updating: 正在被重新渲染
     Unmounting: 已移除真实DOM
 
React为每个状态都提供了两种处理函数,will函数在进入状态之前调用,did函数在进入状态之后调用,三种状态共有五种处理函数:
componentWillMount()
componenrDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object nextProps, object nextState)
componentWillUnmount()
此外,React还提供两种特殊状态处理函数:
     componentWillReceiveProps(object nextProps): 已加载组件收到新的参数时调用
     shouldComponentUpdate(object nextProps, object nextState): 组件判断是否重新渲染时调用
 
组件style属性的设置方式需要写成style={{display: this.state.display}}
 
posted @ 2016-02-24 11:02  平凡公子  阅读(1325)  评论(0编辑  收藏  举报