React的基础使用

本文介绍了React的基础知识,包括其虚拟DOM原理、项目搭建步骤和组件创建。讲解了组件的两种形式——函数式和类组件,以及它们的特性、性能差异。还涉及React中的组件通信、受控组件、children属性、ref的使用以及如何设置默认props。此外,讨论了React的跨级传值策略,主要通过props、回调函数和Redux实现,并提到了合成事件的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React是一个js库

原理

  • React基于虚拟dom,通过js创建虚拟dom,虚拟dom转换真实dom并挂载到页面
    没有在任何一个项目中直接使用标签,而是通过js创建标签

  • 创建虚拟dom :
    react.createElement()
    jsx => 遇到 < > 解析成虚拟dom ; 遇到 { } 解析成js

  • react 提供了一个挂载真实dom节点在页面的方法 :
    虚拟dom转换真实dom并挂载到页面 reactDom.render(要挂载的真实dom节点,挂载的容器id,回调函数)

搭建React项目

1.全局安装脚手架

npm i create-react-app -g

2.创建一个react项目

create-react-app XXX

3.cd进项目进行

cd 项目

4.释放 【(不可逆的)(在没有破坏项目完整性之前去释放)】

npm run eject

5.启动项目【可以在package.json/scripts中自定义指令】

npm run build / npm start

组件

组件的创建【两种】
第一种 :函数式
特点:
function App(props){
    //无this指向,内部this为 undefined
    //无状态,没有state
	//内部访问props通过参数,props是函数形参
	//没有生命周期
	//有返回值
    return <div>i am app</div>
}
第二种 :类声明
特点:
class App extends Component{
    // 内部this指向我们的组件实例 
    // 有状态,有state
    // 有生命周期
    // 内部访问props通过this 
    
    state={
        txt:'i am app'
    }

    render(){
        return <div>{txt}</div>
    }
}
export default App

生命周期 :

在这里插入图片描述

区别:

性能方面:
函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可
函数组件没有this,没有生命周期,没有状态state,
类组件有this,有生命周期,有状态state。

react的组件关系及组件通信

父子通信 使用props (传string number object)

子父 回调函数 (子组件调用父组件的函数,并通过参数传值)

react受控组件(input表单元素和onchange事件的一个结合)

定义:受状态state控制的表单组件

区分value defaultValue 用法

children用法

用于组件传递标签节点,子组件通过this.props.children获取

获取真实dom节点 ref&refs

ref用来命名节点
this.refs 获取节点

给组件设置默认props

组件.defaultProps = {

定义的变量key:变量的默认值

}

react 跨级传值

组件关系

父子 属性-props接收
子父 回调函数
同级 redux
跨级 redux (createContext)

什么是跨级传值 ? 嵌套关系的组件想要进行变量或者方法的传递

react中跨级传值使用 createContext

import React, { Component ,createContext} from 'react';
const {Provider,Consumer} = createContext();

//变量传递的一方 使用Provider
class GrandFather extends Component{
    state={
        name:'顺溜'
    }

    setName = name => this.setState({name})
    
    render(){
        return <Provider value={{name:this.state.name, setName:this.setName }}>
            <div className="grandFather">
                爷爷
                <TwoFather></TwoFather>
            </div>
        </Provider> 
    }
}

//接受变量的一方 使用Consumer
class Son extends Component{
    
    state={
        sonName:''
    }
    render(){
        const {sonName} = this.state
        return <Consumer>
               {
                   store =>{
                        return  <div className="son">
                        我的名字叫{store.name}
                        <input type="text" value={sonName} onChange={ev =>this.setState({sonName:ev.target.value})}/>
                        <button onClick={()=>store.setName(sonName)}>改名字</button>
                    </div>
                   }
               }
        </Consumer>
    }
}

react 合成事件

在react中所有元素的事件并不是元素本身去触发,而是通过事件冒泡到document身上

react中的事件类型

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值