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

React18组件通信与插槽

1、为DOM组件设置Props

在react中jsx中的标签属性被称为Props

DOM组件的类属性,为了防止与js中的class属性冲突改成了className

DOM组件的style属性

import image from "./logo.svg";
function App() {const imgStyleObj = {width: 200,height: 200,};return (<div><img src={image} alt="" className="" style={imgStyleObj} /></div>);
}export default App;

JSX的展开语法

import image from "./logo.svg";
function App() {const imgData = {className: "small",style: {width: 200,height: 200,},};return (<div><img src={image} alt="" {...imgData} /></div>);
}export default App;

效果是一样的

2、为React组件设置Props

操作步骤:

1、请求功能所需的数据(例如文章信息)

2、创建Article组件

3、将文章的数据分别传递给Article

在react组件中展开Props的使用场景

function Detail() {return (<><p>{content}</p><p>状态:{active ? "显示中" : "已隐藏"}</p></>);
}
function Article({ title, content, active }) {return (<><h3>{title}</h3><Detail /></>);
}
function App() {const articleData = {title: "标题1",detailData: {content: "内容1",active: true,},};return (<><Article {...articleData} /></>);
}export default App;

3、将JSX作为Props传递(组件插槽)

function List({ children, title, footer = <div>默认底部内容</div> }) {return (<><h2>{title}</h2><ul>{children}</ul>{footer}</>);
}function App() {return (<><List title="列表1" footer={<p>这是底部内容1</p>}><li>列表项1</li><li>列表项2</li><li>列表项3</li></List><List title="列表2" footer={<p>这是底部内容2</p>}><li>列表项A</li><li>列表项B</li><li>列表项C</li></List><List title="列表3"><li>列表项X</li><li>列表项Y</li><li>列表项Z</li></List></>);
}export default App;

4、子组件向父组件传值

import { useState } from "react";
function Detail({ onActive }) {const [status, setStatus] = useState(false);function handleClick() {setStatus(!status);onActive(status);}return (<div><button onClick={handleClick}>按钮</button><p style={{ display: status ? "block" : "none" }}>Detail的内容</p></div>);
}function App() {function handleActive(status) {console.log(status);}return (<><Detail onActive={handleActive} /></>);
}export default App;

5、使用Context进行多级组件传值

import { createContext, useContext } from "react";
function Section({ children }) {const level = useContext(LevelContext);return (<><section className="section"><LevelContext.Provider value={level + 1}>{children}</LevelContext.Provider></section></>);
}
function Heading({ level, children }) {switch (level) {case 1:return <h1>{children}</h1>;case 2:return <h2>{children}</h2>;case 3:return <h3>{children}</h3>;case 4:return <h4>{children}</h4>;case 5:return <h5>{children}</h5>;case 6:return <h6>{children}</h6>;default:throw new Error("未知的level" + level);}
}
const LevelContext = createContext(0);
function App() {return (<div><Section><Heading level={1}>主标题</Heading><Section><Heading level={2}>副标题</Heading><Heading level={2}>副标题</Heading><Heading level={2}>副标题</Heading><Section><Heading level={3}>子标题</Heading><Heading level={3}>子标题</Heading><Heading level={3}>子标题</Heading><Section><Heading level={4}>子标题</Heading><Heading level={4}>子标题</Heading><Heading level={4}>子标题</Heading></Section></Section></Section></Section></div>);
}export default App;

http://www.xdnf.cn/news/3743.html

相关文章:

  • 数模竞赛的坑,你踩了几个?
  • 源码编译Qt StateMachine
  • 如何在 CentOS 7 命令行连接 Wi-Fi?如何在 Linux 命令行连接 Wi-Fi?
  • 力扣面试150题--二叉树的最大深度
  • 最大子段和 Java
  • 【计算机网络-应用层】解析HTTP会话保持:Cookie与Session的原理与实践
  • 学习黑客网络安全法
  • 26考研 | 王道 | 计算机网络 | 第三章 数据链路层
  • 第一章 初识SpringMVC
  • RUST变量学习笔记
  • 命令模式(Command Pattern)详解
  • 使用 Lux Algo + ATR Zones + IIIX 的黄金剥头皮策略(2025 年更新)
  • 抽象工厂模式(Abstract Factory Pattern)
  • c++26新功能——gcc15.1的支持
  • 第1章 Python 解释器安装(Anaconda/Pyenv 推荐)
  • 生成式 AI 的重要性
  • 第6章 Python 基本数据类型详解(int, float, bool, str)细节补充
  • GPU平台-优云智算
  • 机器学习中的分类和回归问题
  • thonny提示自动补全功能
  • 《Qt C++ 项目中升级 GCC 版本的完整指南》
  • 用Suno V4.5试了一下1850字的歌词进行创作出来了6分钟的歌曲
  • Unity基础学习(四)生命周期函数
  • 机器人编程基础---C语言中的表达式和求值
  • PyTorch_点积运算
  • c++回调函数
  • 嵌入式硬件篇---STM32 系列单片机型号命名规则
  • PyTorch_指定运算设备 (包含安装 GPU 的 PyTorch)
  • C++八股--5--设计模式--适配器模式,代理模式,观察者模式
  • 大数据:驱动技术创新与产业转型的引擎