React学习笔记二

news/2024/7/15 18:28:23 标签: react.js, 学习, 前端

目录

React组件

一、两种创建方式

函数组件

类组件

二、将组件放在独立的js文件中

三、组件的样式

四、ref 获取 dom

五、列表渲染(一中有记,这里就省略) 

六、条件渲染

七、事件处理

八、状态 state 

组件中的数据

九、属性props(只读)

state是内部属性,props是为了更好地实现复用性,从外部接收数据。

十、生命周期(钩子函数)

初始化阶段

1、componentWillMount

2、render

3、componentDidMount

运行中阶段

1、componentWillReceiveProps(nextProps)

2、shouldComponentUpdate(nextProps,nextState)

3、componentWillUpdate

4、render 同初始化中的render

5、componentDidUpdate(preProps,preState,value)

销毁阶段

1、componentWillUnmount


React组件

组件介绍:组件化概念、代表页面中的某部分及功能、独立可复用

一、两种创建方式

函数组件

1、使用JS函数创建的组件

2、函数名必须大写开头

3、组件必须有返回值

例如:

function Hello() {
        return (
            <div>333333</div>
        )
    }
ReactDOM.render(<Hello/>,document.getElementById("root"))

类组件

1、类名大写开头

2、类组件应继承 React.Component 父类

3、类组件必须提供 render() 方法

4、render() 必须有返回值

例如:

class Ok extends React.Component {
        render() {
            return (
                <div>ok</div>
            )
        }
     }
ReactDOM.render(<OK/>, document.getElementById("root"))

二、将组件放在独立的js文件中

步骤:

1、创建组件js文件,eg: Book.js;

2、在Book.js文件中导入React;

3、实用类或者函数创建组件;

4、组件必须要导出才能使用;

5、在指定的文件中导入Book.js;

6、渲染组件。

例如:

Book.js

  // Book.js
    import React from 'react'
    class Book extends React.Component {
        render() {
            return(
                <h1>读书明智</h1>
            )
        }
    }
    // 导出
    export default Book

index.js

import Book from './Book'
ReactDOM.render(<Book/>,document.getElementById("root"))

三、组件的样式

1、行内样式

2、外部导入

(1)准备好外部 CSS 文件,在 js 中使用import引入

注意:class属性建议写为className

四、ref 获取 dom

<p ref='myword'>你好</p>

可以通过 this.refs.myword 获取p标签

注:refs 将要被弃用,在严格模式下会报错

新写法:

myRef = React.createRef();
<div ref={this.myRef}></div>

如果 ref 绑定到组件上,我们会获得这个组件。

五、列表渲染(一中有记,这里就省略) 

六、条件渲染

1、{ 条件 ?<p>yes</p> : <p>no</p> }

2、{ 条件 && <p>ok</p> }

七、事件处理

1、事件绑定

on+事件名称={fn}   注:这里要用驼峰命名法

例如:

  <button onClick={this.myclick}>1</button>
     <button onClick={()=>{
        console.log(this);
     }}>1</button>

八、状态 state 

设置 state 的组件称之为有状态组件,没有设置 state 的组件称之为无状态组件。

组件中的数据

例如:

1、

 class A extends Component {
        state = {key:value}
    }

2、

 class A extends Component {
        constructor() {
            super();
            this.state = {
                key: value
            }
        }
    }

注意:

(1)在类中定义 state (只能写这个名字)  对象--------state = {key:value};

(2)不要直接修改 state : this.state.ok='ok' -------- 使用setState({key:value})

(3)setState注意:

在同步逻辑中,异步更新状态与真实dom;

在异步逻辑中,同步更新状态与真实dom;

接受第二个参数,是个回调函数,在这里状态与dom更新完毕。

九、属性props(只读)

state是内部属性,props是为了更好地实现复用性,从外部接收数据。

1、某组件:

{/*属性*/}
<MyNav title={this.title} leftBtn={isShowLeft}/>

2、MyNav.js:

render() {
        let {title,leftBtn} = this.props;
        return (
            <div>
                {leftBtn && <button>left</button>}
                <p>{title}</p>    
            </div>
        )
     }

 属性验证:

import myprop from 'prop-types'
     static propTypes = {
        title:myprop.string,
        leftBtn:myprop.bool
     }

默认属性:
 

static defaultProps = {
    title:'标题'
}

 属性与状态总结:

(1)属性是父组件对子组件的数据传输与操作;

(2)状态是组件自己内部的数据。

十、生命周期(钩子函数)

只有类组件(函数组件需要hooks支持)

初始化阶段

1、componentWillMount

组件即将挂载,render 之前最后一次修改 state 的机会;

常用于:state的初始化;

备注:如果有警告,可使用 UNSAFE_componentWillMount

2、render

只能访问 props 于 state ,不能修改 state 及进行 dom 输出;

3、componentDidMount

成功执行完毕 render 并完成 dom 节点的渲染,可以对dom 进行修改;

常用于:axios请求,订阅函数调用,计时器,dom操作;

运行中阶段

1、componentWillReceiveProps(nextProps)

父组件修改属性触发;

最先获取父组件传来的属性,可以在这里进行 axios 请求或者其他逻辑处理;

备注:如果有警告,可使用 UNSAFE_componentWillReceiveProps ;

2、shouldComponentUpdate(nextProps,nextState)

返回false,会阻止render的调用;

参数是被修改之后新的属性及状态;

3、componentWillUpdate

组件将要更新,不能修改属性及状态;

备注:如果有警告,可使用 UNSAFE_componentUpdate ;

4、render 同初始化中的render

5、componentDidUpdate(preProps,preState,value)

可以修改 dom;

参数是被修改之前的属性及状态;

销毁阶段

1、componentWillUnmount

再删除组件前进行清理工作。

 


http://www.niftyadmin.cn/n/13028.html

相关文章

理论STL——vector篇(小Z 著)

目录 课前唠一唠 学习过程 vector的定义 方法 vector的访问 vector的常用函数 小结 课前唠一唠 OK&#xff0c;大家好&#xff0c;我又来啦&#xff0c;那么这期讲一下C的一个知识点——vector…… 学习过程 C功能强大&#xff0c;为开发者提供了标准模板库&#xff…

ORACLE在系统级别修改PDB

可以使用ALTER SYSTEM命令动态修改PDB&#xff0c;如果当前容器是PDB&#xff0c;那么可以执行以下命令。 ALTER SYSTEM FLUSH { SHARED_POOL | BUFFER_CACHE | FLASH_CACHE };ALTER SYSTEM {ENABLE | DISABLE} RESTRICTED SESSION;ALTER SYSTEM SET USE_STORED_OUTLINES;ALTE…

Monaco Editor教程(二十):在编辑器的某个特定位置插入自定义的dom内容,图片,表单,表格,视频

前言 哇咔咔&#xff0c;这是我的第20篇Monaco教程&#xff0c;写完这一篇会暂时休息一段时间&#xff0c;练练字&#xff0c;存存稿&#xff0c;读读书&#xff0c;顺便修修文章。 目前全网成系统的monaco中文专栏应该只有我这一个&#xff0c;欢迎评论区打脸。自结束了GitLa…

【数据结构】二叉树详解(下篇)

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《数据结构》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 二叉树&…

猿如意|IntelliJ IDEA Community下载安装以及基础开发设置和快捷键设置的详细教程

文章目录 一、如何在猿如意官网中下载IntelliJ IDEA Community&#xff1f; 二、关于IntelliJ IDEA Community的安装以及使用前的设置教程 1.下载安装 2.基础开发设置 三、总结 一、如何在猿如意官网中下载IntelliJ IDEA Community&#xff1f; 我们要想能够更简单的获取到Int…

获得认证标志证书VMC教程

Verified Mark Certificate(VMC)是由证书颁发机构颁发的用于验证徽标所有权的数字证书。在收到VMC之前&#xff0c;您的徽标必须是注册商标。 VMC验证您的组织是您品牌徽标的合法所有者。使用带有VMC的徽标有助于防止垃圾邮件发送者和其他恶意用户使用他们不拥有的品牌徽标。注…

【英语语法】but

but 的基础用法1. but 从根本上是个连词&#xff0c;连接两个对等的部分&#xff0c;最常见的意思是指&#xff1a;但是、不过&#xff0c;用来表示转折或是相反的语气 I would have written before, but I have been ill. 我以前本可以写&#xff0c;但我生病了。They see th…

『Java课设』JavaSwing+MySQL实现学生成绩管理系统

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位喜欢写作&#xff0c;计科专业大三菜鸟 &#x1f3e1;个人主页&#xff1a;starry陆离 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 『Java课设』JavaSwingMySQL实现学生成绩管理系统前言1.开…