react学习笔记

day:5
5.1、样式的模块化

如果项目中使用的不是less和sass,使用css则需要做样式的模块化,样式命名采用import hello='./xx/xx.modules.css的方式,对样式进行模块化处理,防止不同模块之间样式覆盖问题。

5.2  功能界面的组件化编码流程

1.拆分组件:拆分界面,抽取组件

2.实现静态组件:使用租金按实现静态页面效果

3.实现动态组件

    3.1动态显示初始化数据(数据类型、数据名称、保存在哪个组件?)

    3.2交互(从绑定事件监听开始)

day:6

6.1、react开发者调试工具

安装:因为谷歌浏览器不能打开应用商店,我这里通过本地文件导入的方式安装。

tips:react代码在网页跑起来显示的图标是这种颜色的,一般是没有经过打包的,打包部署后应该是正常的react图标icon颜色。

效果:安装之后会多出两个小功能

component:观察网页有多少个组件

profiler:记录网站性能,渲染用了多久,那个组件加载时间长

 6.2  react中的函数式组件

        组件包含:html结构、css样式、js交互等。这里定义一个简单组件,至少包含了html(通过函数返回,react调用函数做了渲染)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 根节点 -->
     <div id="root"></div>
    <!-- 导入 -->
    <script src="./lib/react.js"></script>
    <script src="./lib/react-dom.js"></script>
    <script src="./lib/babel.js"></script>
    <!-- script代码 -->
     <script type="text/babel">
      // 创建函数式组件
       function Demo(){
        console.log(this)//此处的this是unsefined
        return <h2>我是函数定义的组件</h2>
       }
      // 渲染组件到页面
       ReactDOM.render (<Demo/>, document.getElementById('root'))

     </script>
</body>
</html>

注意事项:

1、首先这里的render第一个参数应该是一个首字母大写的标签;

2、通过babel转化之后的js代码开启了严格模式.经过转化后函数内的this指向undefined;

3、这里的函数必须有return返回值

6.3 react中的类组件
     一、复习类的基本知识
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
        // 创建一个类
        class Person{
            // 构造器方法
            constructor(name,age){
                // 构造器中的this是谁?-类的实例对象
                this.name=name
                this.age=age
            }
            // 一般方法
            speak(){
                console.log(`我叫${this.name},我的年龄是${this.age}`)
            }
        }
        const p1=new Person('tom',18)
        const p2=new Person('jerry',19)
        console.log(p1)
        console.log(p2)
        p1.speak()

        // 常见一个student类,继承person类
        class Student extends Person{
            constructor(name,age,grade){
                super(name,age)
                this.grade=grade
            }
            // 重写从父类继承过来的方法
            speak(){
                console.log(`我叫${this.name},我的年龄是${this.age},我读的是${this.grade}年级`)
            }
        }
        const p3=new Student('小张',16,'高一')
        console.log(p3)
        p3.speak()

    </script>
</body>
</html>

 总结:

1.类通过class 关键字创建。类中的构造器不是必须写的,要对实例进行一些初始化的操作,如添加指定属性时才写

2.如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的

3.类中所定义的方法,都是放在了类的原型对象上,供实例去使用

    二、类组件

         1.react解析组件标签,找到了MyComponent组件

         2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法

         3.将render返回的虚拟dom转为真实dom,随后呈现在页面中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 根节点 -->
     <div id="root"></div>
    <!-- 导入 -->
    <script src="./lib/react.js"></script>
    <script src="./lib/react-dom.js"></script>
    <script src="./lib/babel.js"></script>
    <!-- script代码 -->
     <script type="text/babel">
        // 获取渲染节点
        const root=ReactDOM.createRoot(document.querySelector('#root'))
       
        // 定义类式组件
        class MyComponent extends React.Component{
            // 渲染内容
            render(){//render是放在MyComponent的原型对象上,供实例使用
               console.log(this)//render中的this指向谁?--MyComponent的实例对象
                return(
                    <div>
                       <h2>我是用类定义的组件(适用于【复杂组件】的定义</h2>
                    </div>
                )
            }
        }
        // render函数渲染组件
        root.render(<MyComponent/>)

     </script>
</body>
</html>

注意事项:render中的this指向MyComponent组件的实例对象

组件实例对象上的props/refs/state是react中要的三个东西。后面应该会经常用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值