源码
//生命周期脚本var HelloMassage = React.createClass({//设置默认属性getDefaultProps: function() {console.log("初始化默认的属性");return {name: "test"}},//设置默认状态getInitialState: function() {console.log("初始化状态成功");return {isLoading: false}},//组件被挂载之前,Render 之前最后一次修改状态的机会componentWillMount: function() {//修改状态this.setState({isLoading: true});console.log("组件被挂载之前");},//组件被渲染之后componentDidMount: function() {console.log("组件被真实的渲染到页面中完成");// console.log(this.refs);// console.log(this.refs.uname);//获取 jquery dom// console.log($(this.refs.uname));//获取 value// console.log($(this.refs.uname).val());//修改 css// $(this.refs.uname).css({// "color": "red"// });//自动完成(Autocomplete) 单词补充的示例// var availableTags = [// "ActionScript",// "AppleScript",// "Asp",// "BASIC",// "C",// "C++",// "Clojure",// "COBOL",// "ColdFusion",// "Erlang",// "Fortran",// "Groovy",// "Haskell",// "Java",// "JavaScript",// "Lisp",// "Perl",// "PHP",// "Python",// "Ruby",// "Scala",// "Scheme"// ];// $(this.refs.uname).autocomplete({// source: availableTags// });//获取 ReactDOM 这个获取到的是一个纯粹的 DOM 节点console.log(ReactDOM.findDOMNode(this.refs.uname));},//不能修改属性和状态componentWillUpdate: function(data) {console.log("componentWillUpdate", data);},//可以修改 DOMcomponentDidUpdate: function(data) {console.log("componentDidUpdate", data);},//返回 false 会阻止 render 调用shouldComponentUpdate: function(nextrops) {console.log("shouldComponentUpdate", nextrops);//返回一个 boolean 值// return false;//false 的话页面就不会更新return true;},//父组件修改属性触发,可以修改新属性和方法componentWillReceiveProps: function(nextrops) {console.log("componentWillReceiveProps", nextrops);},//销毁阶段 默认是不会触发的需要 给 dom 绑定事件componentWillUnmount: function() {console.log("已经删除了");},_change: function(e) {// console.log(e);// console.log(e.target);// console.log(e.target.value);//判断改变的内容if (e.target.value == "123") {//移除 React 创建的 DOM 节点//需要注意的是这里移除的控件一定得是最终创建时的那个 dom 不然是不会成功的// ReactDOM.unmountComponentAtNode(document.getElementById("xx"));//会报错 因为传的阶段不是当初创建时所用的ReactDOM.unmountComponentAtNode(document.getElementById("example"));}},render: function() {console.log("render 页面");return (<div>{/*这里可以获取到父组件传递过来的 name 属性的值*/}<label htmlFor="uname">{this.props.name}</label>{/*<input ref="uname" value={this.props.name} onChange={this._change} type="text"/>*/}<input id="uname" ref="uname" onChange={this._change} type="text"/><h1>{this.props.name}</h1>{!this.state.isLoading ? <h1>loading...</h1> : <h1>ok</h1>}</div>)}});//新建一个父组件var HelloWorld = React.createClass({getInitialState: function() {return {data: "父容器的状态"}},click: function() {this.setState({data: "被改变"})},render: function() {return (<form onClick={this.click} id="xx">{/*使用父组件标签包裹着子组件 这样就可以通过父组件来给子组件传递一些属性了*/}<HelloMassage name={this.state.data} /></form>)}});ReactDOM.render(<HelloWorld name="我是父组件" />,document.getElementById("example"));
React 生命周期总结:
- componentWillUnmount
清理操作,也就是销毁阶段,它可以在我们卸载组件的时候处理一些代码中的逻辑、操作和其他的一些脏东西
- componentDidMount
获取真实的 DOM 节点,这个是在组件被渲染之后才会执行的操作
- componentWillReceiveProps
通过父组件控制子组件,这个是说在父组件修改属性触发,可以修改新属性和方法
- shouldComponentUpdate
动态设置更新增强性能,返回 false 会阻止 render 调用
- render 最重要的点
控制 state ,在整个的组件中到处都在执行 render ,所以 render 的性能是必须要把控好的



