理解了框架的原理后,那么使用框架就迫在眉睫了,如果只懂原理不知道怎么使用,是不是有些半吊子感觉,整个的思路就是这样– 原理+简单Demo(注重理解函数的api)+实战 本节讲的就是简单的Demo,废话不多说 使用React的最基本的几个概念: 首先明白:React注重view层
下面通过一个简单的例子来说明整个流程:
import React from 'react' import ReactDOM from 'react-dom' export default class Demo extends React.Component{ constructor(props){ super(props); console.log("....Constructor!...."); console.log(this.props.color); this.state={ state:'start' }; } componentWillMount(){ console.log("....Will Mount!...."+this.state.state); } render(){ console.log("....Render!...."+this.state.state); return <div><button onClick={this.cl.bind(this)}>Demo</button> <button onClick={this.force.bind(this)}>Force</button></div> } componentDidMount(){ console.log("....Mount Done!...."+this.state.state); } componentWillReceiveProps(){ console.log('Receive new color.....'+this.props.color); console.log("....Will receive props!...."+this.state.state); } shouldComponentUpdate(){ console.log("....Should update!...."+this.state.state); return true; //默认返回true,返回false将不会渲染组件 } componentWillUpdate(){ console.log("....Will Update!...."+this.state.state); } componentDidUpdate(){ console.log("....Did update!...."+this.state.state); } componentWillUnmount(){ console.log("Will mount"+this.state.state); } cl(){ this.setState({ state:"change" }) } force(){ this.setState({ state:"force" }) this.forceUpdate(); } } //如果不传递参数进来就是color default Demo.defaultProps = { color: 'color default' } //将组件渲染到界面上去 ReactDOM.render(<Demo/>,document.getElementById('main')); //如果传递参数,color default就变成 new color ReactDOM.render(<Demo color="new color"/>,document.getElementById('main'));输出结果为: 运行结果如图所示:
其实,简单来讲,React的生命周期,提供给用户在各个阶段,可以操作控件的接口,类似Java中的切面编程(比喻可能不是很确切。。。。),随时插入。
上面这个组件,就是一个父组件,嵌套一个子组件,先上运行结果 可以看到,子组件先装载,后面父组件再装载完成,很好理解啊,如果儿子没完成,父怎么能完成? 那么,当我们更新父组件的状态,子组件会不会更新? 运行结果: 可以看到, 父组件更新后,子组件也更新了。 但是当子组件更新的时候,只更新了子组件本身。 为什么要这么设计? 你需要明白,React本身是组件嵌套生成的,而不是通过继承实现的,继承的原则是替换原则(子类出现的地方,父类可以出现),但是组件的思想是,管好自己的一片地。
