React面向组件编程| 青训营笔记

43 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2天

模块

向外提供特定功能的js程序, 一般就是一个js文件

为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂。

作用:复用js, 简化js的编写, 提高js运行效率

组件

用来实现局部功能效果的代码和资源的集合(html/css/js/image等等)

为什么要用组件: 一个界面的功能更复杂

作用:复用编码, 简化项目编码, 提高运行效率

模块化

当应用的js都以模块来编写的, 这个应用就是一个模块化的应用

组件化

当应用是以多组件的方式实现, 这个应用就是一个组件化的应用

函数式组件、类式组件

  1. 组件名必须首字母大写
  1. 虚拟DOM元素只能有一个根元素
  1. 虚拟DOM元素必须有结束标签
  1. state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)
  1. 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件)

强烈注意

  1. 组件中render方法中的this为组件实例对象
  1. 组件自定义的方法中this为undefined,如何解决?

a) 强制绑定this: 通过函数对象的bind()

b) 箭头函数

  1. 状态数据,不能直接修改或更新
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>state简写方式</title>
</head>
<body>
    <!-- 准备好一个“容器” -->
    <div id="test"></div>
    
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom,用于支持react操作DOM -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入babel,用于将jsx转为js -->
    <script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel">
        //1.创建组件
        class Weather extends React.Component{
            //初始化状态
            state = {isHot:false,wind:'微风'}
​
            render(){
                const {isHot,wind} = this.state
                return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h1>
            }
​
            //自定义方法————要用赋值语句的形式+箭头函数
            changeWeather = ()=>{
                const isHot = this.state.isHot
                this.setState({isHot:!isHot})
            }
        }
        //2.渲染组件到页面
        ReactDOM.render(<Weather/>,document.getElementById('test'))
                
    </script>
</body>
</html>