class App extends React.Component{
? ? ? ? //01 设置默认属性
? ? ? ? static defaultProps = {
? ? ? ? ? ? ? ? n:1}
? ? ? ? //02 初始化状态
? ? ? ? constructor(props){ //constructor创建实例,本质是创建了一个新的对象
? ? ? ? ? ? ? ? //再constructor函数内处理this绑定问题
????????????????//2.1 super()做什么?
? ? ????????? ? console.log("----coustructor");
? ? ? ? ? ? ? ? console.log(this,this.porps)?//在super实例化props之前拿不到this/this.props
? ? ? ? ? ? ? ? //报错:this hasn't beeninitialised? - super() hasn't been called?没有初始化
? ? ? ? ? ? ? ? super(props)?//this.props = props给当前组件实例挂载props特殊属性
? ? ? ? ? ? ? ? console.log(this.props)//在super实例props之后,可以输出实例化的props
????????????????//2.2?初始化状态
????????????????this.state = {m:0}
????????????????//2.3 this绑定
? ? ? ? ? ? ? ? this.go = this.go.bind(this)
? ? ? ? ? ? ? ? this.go1 = this.go1.bind(this)
? ? ? ? ? ? ? ? this.go2 = this.go2.bind(this)
? ? ? ????????? //03 componentWillMount第一次组件渲染之前(render)
? ? ? ? ? ? ? ? 只会执行一次
????????????????componentWillMount(){
????????????????????????console.log("----componentWillMount")
????????????????????????//3.1?componentWillMount能获取当前组件实例
????????????????????????console.log(this.state)
? ? ? ? ? ? ? ? ? ? ? ? console.log(this.props) //可以获取组件实例
????????????????????????//3.2?可以通过setState修改数据
? ? ? ? ? ? ? ? ? ? ? ? ?this.state = {m:1} //直接修改实例数值,报错
? ? ? ? ? ? ? ? ? ? ? ? ?this.setState({m:1}) //setState可以修改实例数据,但是不会触发render渲染
? ? ? ? ? ? ? ? ? ? ?? //3.3不适合异步请求
????????????????????????render不会阻塞渲染,不适合做请求数据,时机不确定,可能会出现二次页面刷新
????????????????????????setTimeout(()=>{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this.setState({m:1})
????????????????????????},1000) //修改了数据且触发了render()
? ? ? ? ? ? ? ? ? ? ?? //3.4 场景: 服务器端渲染
????????????????}
? ? ? ? ? ? ? ??//3.5使用componentWillMount不推荐使用
????????????????使用时警告Warning:componentWillMount has been renamed,and is not recommended for use
????????}
? ? ? ? //04 render渲染:第一次挂载和更新
????????解析jsxm构建虚拟DOM=>(diff算法)=>真实DOM
? ? ? ? //注:diff算法(important)
????????React中的diff算法 - 知乎 (zhihu.com)
? ? ? ? render(){
? ? ? ? ? ? ? ? return(
? ? ? ? ? ? ? ?? ? ? ? ?console.log("----render")
? ? ? ? ? ????????? ? ? <div> app component:{this.state.m} </div>
????????????????)
????????}
}