一、函数式组件(简单式)
<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>函数式组件</title></head><body><div id="test"></div><script src="../js/react.development.js"></script><script src="../js/react-dom.development.js"></script><script src="../js/babel.min.js"></script><script type="text/babel">//1.创建函数式组件function Test(){console.log(this);// 此处的this是undefined,因为babel编译后开启了严格模式return <h2>函数式组件的创建</h2>}//2.渲染组件到页面ReactDOM.render(<Test/>,document.getElementById('test'))/*执行ReactDOM.render(<Test/>,document.getElementById('test'))后:1.React解析组件标签,找到了Test组件.2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中.3.*/</script></body></html>
二、类式组件(复杂式)
<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>Test</title></head><body><div id="test"></div><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script><script type="text/babel">//1.创建类式组件class MyComponent extends React.Component{render(){return <h2>类式组件的创建</h2>}}//2.渲染组件ReactDOM.render(<MyComponent/>,document.getElementById('test'))/*执行ReactDOM.render(<MyComponent/>,document.getElementById('test'))后:1.React解析组件标签,找到了MyComponent组件.2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法.3.将返回的虚拟DOM转为真实DOM,随后呈现在页面中.4.render中的this----->MyComponent的实例对象*/</script></body></html>
三、函数组件与类式组件的区别
1.简单式组件无状态(state),复杂式组件有状态(state)
2.对状态的理解:
2.1 state是组件对象的属性之一,值是对象(可以包含对个key-value组合)
2.2 更新组件状态,达到更新对应的页面显示(重新渲染组件)
3.注意:
3.1 组件中render方法中的this为组件实例对象
3.2 组件自定义的方法中this为undefined的解决办法
3.2.1 强制绑定this,通过函数的bind
3.2.2 箭头函数
3.3 状态数据不能直接修改或更新
四、初始化状态(state)&事件绑定
<!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>Test</title></head><body><div id="test"></div><script src="js/react.development.js"></script><script src="js/react-dom.development.js"></script><script src="js/babel.min.js"></script><script type="text/babel">//1.创建类式组件class Weather extends React.Component {constructor(props) {super(props);this.state = {isHot: false}this.changeWeather = this.changeWeather.bind(this)}render() {const {isHot} = this.statereturn (<h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'}</h1>);}changeWeather() {const isHot = this.state.isHot// this.state.isHot = !isHotthis.setState({isHot: !isHot})}}//2.渲染组件ReactDOM.render(<Weather/>, document.getElementById('test'))</script></body></html>
