当前位置: 首页 > news >正文

REACT--组件通信

组件之间如何进行通信?

组件通信

组件的通信主要借助props传递值

分为整体接收、解构接收

整体接收
import PropTypes from 'prop-types';

//子组件
function Welcome(props){
    return (
        <div>
            hello Welcome,{props.count},{props.msg}
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为字符串类型
    count: PropTypes.string,
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

// 父组件
function App(){
    return (
        <div>
            hello App
            <Welcome count="123" msg="hi react"/>
        </div>
    )
}

export default App

解构接收

import PropTypes from 'prop-types';

//子组件
function Welcome({count,msg}){
    return (
        <div>
            hello Welcome,{count},{msg}
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为字符串类型
    count: PropTypes.string,
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

// 父组件
function App(){
    return (
        <div>
            hello App
            <Welcome count="123" msg="hi react"/>
        </div>
    )
}

export default App

传递属性但是不传值,实际传的是true

点击事件:

import PropTypes from 'prop-types';

//子组件
function Welcome({onClick,getData}){
    getData('我是子组件的数据')
    return (
        <div onClick={onClick}>
            hello Welcome
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 onClick 属性为函数类型
    onClick: PropTypes.func.isRequired,
    // 验证 getData 属性为函数类型
    getData: PropTypes.func.isRequired
};

// 父组件
function App(){
    const handleClick =()=>{
        console.log(1234)
    }
    const getData = (data)=>{
        console.log(data)
    }
    return (
        <div>
            hello App
            <Welcome onClick={handleClick} getData={getData}/>
        </div>
    )
}

export default App

 组件内容如何组合到一起

主要是通过props的children属性,传递多组内容只要是大括号可以接收的都可以进行传递,比如样式

通信的数据如何添加默认值和限定类型

通信数据添加默认值:

import PropTypes from 'prop-types';

function Welcome({count,msg}){
    return (
        <div>
            hello Welcome,{count},{msg}
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为数字类型
    count: PropTypes.number,
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

// 为 Welcome 组件的属性设置默认值
Welcome.defaultProps = {
    count: 0,
    msg: 'default content'
};

function App(){
    return (
        <div>
            hello App
            <Welcome count={123} msg="hello react"/>
            <Welcome count={123}/>
        </div>
    )
}

export default App

这样也可以:

import PropTypes from 'prop-types';

function Welcome({count=0,msg='default'}){
    return (
        <div>
            hello Welcome,{count},{msg}
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为数字类型
    count: PropTypes.number,
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

function App(){
    return (
        <div>
            hello App
            <Welcome count={123} msg="hello react"/>
            <Welcome count={123}/>
        </div>
    )
}

export default App

 怎么限定类型捏?

很简单,就是使用Protypes

我的版本高格式检测严格都不允许不添加这个勒:

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为数字类型
    count: PropTypes.number,
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

不添加这个则会强制的报错

 

想要限定多种类型的话可以这样做:

import PropTypes from 'prop-types';

function Welcome({count=0,msg='default'}){
    return (
        <div>
            hello Welcome,{count},{msg}
        </div>
    )
}

// 对 Welcome 组件的属性进行类型验证
Welcome.propTypes = {
    // 验证 count 属性为数字类型
    count: PropTypes.oneOfType([
        PropTypes.string,
        PropTypes.number,
    ]),
    // 验证 msg 属性为字符串类型
    msg: PropTypes.string
};

function App(){
    return (
        <div>
            hello App
            <Welcome count={123} msg="hello react"/>
            <Welcome count={123}/>
        </div>
    )
}

export default App

组件需要是纯函数

 什么是纯函数?

纯函数只负责自己的任务,他不会更改该函数调用前就已经存在的对象或者变量

输入相同,则输出相同,给定相同的输入,纯函数应该总是返回相同的结果,使用严格模式检测不纯的计算

function App({msg}){
    let count = 0
    count ++
    console.log(count)
    return (
        <div>
            hello App,{msg}
        </div>
    )
}

export default App

// 不纯函数
// let bar = 1
// function foo(){
//     bar++
// }
// foo()

组件的状态和useState函数

 瞬间变化的数据被称为状态(state),状态可以进行数据驱动视图,普通变量不行

useState可创建状态和修改状态的方法

状态如何改变视图

为什么普通变量不能呢?是因为无法重新渲染jsx

state状态可行就是因为可以重新触发函数组件,并且state状态具备组件的记忆


import { useState } from "react";
function App(){
    const [count,setCount] = useState(0)    //可记忆
    const handleClick = ()=>{
        setCount(count+1)       //可以重新触发函数组件的执行
    }
    console.log(123)
    return (
        <div>
            hello App
            <button onClick={handleClick}>点击</button>
            {count}
        </div>
    )
}

export default App

渲染与提交的过程分为三个步骤

步骤一:触发一次渲染

组件的初次渲染,createRoot().render()

内部状态更新,触发渲染送入队列

步骤二:渲染您的组件

在初次进行渲染的时候,react会调用根组件

内部状态更新会渲染对应的函数组件

步骤三:提交到DOM上

初次渲染,appendChild() DOM API

内部状态更新,更新差异的DOM节点

相关文章:

  • 长短期记忆网络:从理论到创新应用的深度剖析
  • 链表-基础训练(二)链表 day14
  • HAProxy介绍与编译安装
  • 宝塔扩容——阿里云如何操作
  • ‌最新版DeepSeek保姆级安装教程:本地部署+避坑指南
  • 动态规划01背包问题系列一>01背包
  • Spring Boot 如何保证接口安全
  • 请说明C#中的List是如何扩容的?
  • 10.Docker 仓库管理
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • 运维基线方案说明
  • AI学习指南HuggingFace篇-Hugging Face 的核心工具
  • windows11那些事
  • 计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
  • k2路由器登录校园网
  • 如何确定虚函数在虚函数表中的位置3 (Linux x64版本)
  • Python----数据结构(哈希表:哈希表组成,哈希冲突)
  • [漏洞篇]文件上传漏洞详解
  • Nacos学习(一)——基本介绍、安装与负载均衡策略
  • MySQL 面试总结
  • 上市不足一年,吉利汽车拟私有化极氪并合并:整合资源,杜绝重复投入
  • 中国经济新动能|警惕数字时代下经济的“四大极化”效应
  • 前瞻|美联储明晨“按兵不动”几无悬念:关税战阴霾下,会否释放降息信号
  • 吴清:巴菲特即将退休,但价值投资、长期投资、理性投资、努力回报投资者等理念不会退休
  • 潘功胜:坚定支持汇金公司在必要时实施对股票市场指数基金的增持
  • 潘功胜:将创设科技创新债券风险分担工具