一、函数式组件(简单式)

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>函数式组件</title>
  6. </head>
  7. <body>
  8. <div id="test"></div>
  9. <script src="../js/react.development.js"></script>
  10. <script src="../js/react-dom.development.js"></script>
  11. <script src="../js/babel.min.js"></script>
  12. <script type="text/babel">
  13. //1.创建函数式组件
  14. function Test(){
  15. console.log(this);// 此处的this是undefined,因为babel编译后开启了严格模式
  16. return <h2>函数式组件的创建</h2>
  17. }
  18. //2.渲染组件到页面
  19. ReactDOM.render(<Test/>,document.getElementById('test'))
  20. /*
  21. 执行ReactDOM.render(<Test/>,document.getElementById('test'))后:
  22. 1.React解析组件标签,找到了Test组件.
  23. 2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中.
  24. 3.
  25. */
  26. </script>
  27. </body>
  28. </html>

二、类式组件(复杂式)

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Test</title>
  6. </head>
  7. <body>
  8. <div id="test"></div>
  9. <script src="js/react.development.js"></script>
  10. <script src="js/react-dom.development.js"></script>
  11. <script src="js/babel.min.js"></script>
  12. <script type="text/babel">
  13. //1.创建类式组件
  14. class MyComponent extends React.Component{
  15. render(){
  16. return <h2>类式组件的创建</h2>
  17. }
  18. }
  19. //2.渲染组件
  20. ReactDOM.render(<MyComponent/>,document.getElementById('test'))
  21. /*
  22. 执行ReactDOM.render(<MyComponent/>,document.getElementById('test'))后:
  23. 1.React解析组件标签,找到了MyComponent组件.
  24. 2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法.
  25. 3.将返回的虚拟DOM转为真实DOM,随后呈现在页面中.
  26. 4.render中的this----->MyComponent的实例对象
  27. */
  28. </script>
  29. </body>
  30. </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)&事件绑定

  1. <!DOCTYPE html>
  2. <html lang="zh">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Test</title>
  6. </head>
  7. <body>
  8. <div id="test"></div>
  9. <script src="js/react.development.js"></script>
  10. <script src="js/react-dom.development.js"></script>
  11. <script src="js/babel.min.js"></script>
  12. <script type="text/babel">
  13. //1.创建类式组件
  14. class Weather extends React.Component {
  15. constructor(props) {
  16. super(props);
  17. this.state = {isHot: false}
  18. this.changeWeather = this.changeWeather.bind(this)
  19. }
  20. render() {
  21. const {isHot} = this.state
  22. return (
  23. <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'}</h1>
  24. );
  25. }
  26. changeWeather() {
  27. const isHot = this.state.isHot
  28. // this.state.isHot = !isHot
  29. this.setState({isHot: !isHot})
  30. }
  31. }
  32. //2.渲染组件
  33. ReactDOM.render(<Weather/>, document.getElementById('test'))
  34. </script>
  35. </body>
  36. </html>