image.png

  • 函数

image.png
image.png

  • this

image.png
ES5

image.png
ES6

this 调用的源码

  • ES5 ``` //可控组件 value 和 onChange 属性 var HelloMassage = React.createClass({ //设置默认状态 getInitialState: function() {
    1. return {
    2. data: this.props.data
    3. }
    }, //组件被渲染之后 componentDidMount: function() {
    1. var me = this;
    2. setTimeout(function() {
    3. // 修改属性值
    4. //这个因为下面使用的是 defaultValue 所以这个是不会生效的,只能通过下面的赋值的写死的方法来改变,这个就是不可控组件
    5. me.setState({
    6. data2: "data2",
    7. data: 123
    8. });
    9. console.log("我已渲染完毕");
    10. }, 1000);
    11. // ReactDOM.findDOMNode(this.refs.uname).value = "123";
    }, //在下面出现了多个和input 并绑定这个事件的时候,就变成了一个公用的方法 下面的两个 ipunt 改变值时都会触发 handleChange: function(e) {
    1. var me = this;
    2. me.setState({
    3. data: e.target.value
    4. });
    }, render: function() {
    1. return (
    2. <form>
    3. <input ref="uname2" onChange={this.handleChange.bind(this,"data2")} value={this.state.data2} type="text"/>
    4. <input ref="uname2" onChange={this.handleChange.bind(this,"data")} value={this.state.data} type="text"/>
    5. </form>
    6. );
    }, }); ReactDOM.render( , document.getElementById(“example”) );
  1. - ES6

//ES6 写法 “use strict”; class HelloMassage extends React.Component { constructor(props) { super(props); this.state = { title: props.title + 200 }; // 把下面的这个注释掉可以在 h1 标签调用的时候通过 => 将这个 this -> HelloMassage 传过去 否则的话这个 this 就是 null //一般 this 都是在这里绑定的 不会在下面的标签中再去操作 // this.handleClick = this.handleClick.bind(this); } // handleClick(e) { // console.log(this); // console.warn(“元素:”, e.target); // } //ES6 传入多个参数的写法 handleClick(a, e, n) { console.log(a); //HelloMassage{} console.warn(“元素:”, e.target); //

321


console.log(n); //test1 } render() { return (
{/测试默认属性/}

{this.props.title}

{/ES6 写法/} {/一般 this 都是在这里绑定的 不会在下面的标签中再去操作/}

this.handleClick(this,e,”test1”)}>{this.props.title}

{/测试获取 state 属性的参数值/}

{this.state.title}

) } } //通过变量传递 var data = “通过一个变量传递属性”;

//属性校验器,表示必须是 string HelloMassage.propTypes = { title: React.PropTypes.string, }; //设置默认属性 HelloMassage.defaultProps = { title: “321” };

ReactDOM.render( , document.getElementById(“example”) );

```