如何在react/next.js app中的同级组件间传递数据
这篇文章也可以在我的博客中查看
问题
为什么会有这么奇怪的需求?在事情真正发生前真的难说,但真遇到一个需要这么做的情况。
最近想做一个网页时钟,它的结构如下:
+ 时钟(计算时间,组织各个要素)
|--+ 设置面板(时间设置)
|--+ 主题(显示时间的样式)
- 设置是针对于时钟的,比如:进制、时区……
- 主题可以不断增加,用于花里花哨地改变时钟的输出
但现在我需要为主题也增加设置项,加入到设置面板中
因此需要同级传递数据(主题->设置面板)
解决
改变结构
我也想过改变时钟的结构,比如:
+ 时钟(计算时间,组织各个要素)
|--+ 主题(显示时间的样式)|--+ 设置面板(时间设置)
这样主题、设置面板就是父子关系,想要往下传递数据使用一般的props属性就可以
但是我的设置面板本身是针对时钟的,也就是无论主题怎么更变,设置面板的总体样式都是不变的。
也就是,我布局设置面板,不需要主题的参与
虽然这么做是可以解决问题的,但针对这个案例:
我左思右想,最后还是认为:设置面板的父元素应该是时钟,而不是主题
父组件中介
先总结一下,各种流向信息在React中的传递方法是:
- 自上而下:向Props属性传入值
- 自下而上:向Props属性传入setState函数回调
- 全局:Context
- 同级:???
好吧。显然,最直截了当的方法是:把同级看做是一个“自下而上而下”操作
设置面板
子组件ClockSettings中,定义可插入的ReactNode元素插槽:
interface IClockSettingsProps {themeSettingsNode?: ReactNode,
}export default function ClockSettings({ ...props }: IClockSettingsProps) {return (<div>{props.themeSettingsNode}</div>)
}
主题
首次渲染时调用onLoadSettings,传出该主题的设置项元素(ReactNode):
interface IClockProps {onLoadSettings?: (value: ReactNode) => void,
}export default function ClockTheme1({ ...props }: IClockProps) {useEffect(() => {props.onLoadSettings?.(<div>{/* input element maybe... */}</div>)}, []);
}
父元素
最后,在父元素(时钟)里,组合数据的传递:
export default function Clock() {const [settingsNode, setSettingsNode] = useState<ReactNode>();return <><ClockTheme1 onLoadSettings={setSettingsNode} /><ClockSettings themeSettingsNode={settingsNode} /></>)
}
小结
在同级组件之间传递数据,无论是简单数值还是复杂元素,都需要通过父组件作为跳板
相关文章:
如何在react/next.js app中的同级组件间传递数据
这篇文章也可以在我的博客中查看 问题 为什么会有这么奇怪的需求?在事情真正发生前真的难说,但真遇到一个需要这么做的情况。 最近想做一个网页时钟,它的结构如下: 时钟(计算时间,组织各个要素ÿ…...
软件需求文档、设计文档、开发文档、运维文档大全
在软件开发过程中,文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程,还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用,以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档要求…...
排序算法-----归并排序
目录 前言: 归并排序 1. 定义 2.算法过程讲解 2.1大致思路 2.2图解示例 拆分合成步骤 编辑 相关动态图 3.代码实现(C语言) 4.算法分析 4.1时间复杂度 4.2空间复杂度 4.3稳定性 前言: 今天我们就开始学习新的排序算法…...
docker 配置 gpu版pytorch环境--部署缺陷检测--Anomalib
目录 一、docker 配置 gpu版pyhorch环境1、显卡驱动、cuda版本、pytorch cuda版本三者对应2、拉取镜像 二、部署Anomalib1、下载Anomalib2、创建容器并且运行3、安装Anomalib进入项目路径安装依赖测试: 一、docker 配置 gpu版pyhorch环境 1、显卡驱动、cuda版本、p…...
为什么定时发朋友圈会更有效呢?
这是因为在同一时段 发送的好友朋友圈 无法有效分散用户的注意力 导致曝光度难以提升 而通过推广定时发朋友圈 可根据自己的粉丝活跃度 设置发圈时间 让每一条朋友圈都能高效 传递到更多的好友手中 这样,曝光度自然而然地就大大提升了! 1.多个号…...
【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建
系列文章目录 【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建 文章目录 系列文章目录@[TOC](文章目录)前言一、PHP介绍二、Centos 安装 PHP2.1、安装并启动 Nginx2.2、安装并启动 mariadb2.3、安装 rh-php2.4、添加 Nginx 配置2.5、Nginx 服务三、使用 Docker 为 PHP 部署开发…...
【zookeeper】zk选举、使用与三种节点简介,以及基于redis分布式锁的缺点的讨论
这里我准备了4台虚拟机,从node1到node4,其myid也从1到4. 一,zk server的启动和选举 zk需要至少启动3台Server,按照配置的myid,选举出参与选举的myid最大的server为Leader。(与redis的master、slave不同&a…...
Unity截图生成图片 图片生成器 一键生成图片
使用Unity编辑器扩展技术实现快速截图功能 效果: 里面没有什么太难的技术,直接上源码吧 注意!代码需要放在Editor文件下才能正常运行 using System; using UnityEditor; using UnityEngine;[ExecuteInEditMode] public class Screenshot …...
Matlab图像处理-区域特征
凹凸性 设P是图像子集S中的点,若通过的每条直线只与S相交一次,则称S为发自P的星形,也就是站在P点能看到S的所有点。 满足下列条件之一,称此为凸状的: 1.从S中每点看,S都是星形的; 2.对S中任…...
golang 自动生成文件头
安装koroFileHeader控件 打开首选项,进入设置,配置文件头信息"fileheader.customMade": {"Author": "lmy","Date": "Do not edit", // 文件创建时间(不变)// 文件最后编辑者"LastEditors"…...
Excel中的宏、VBA
一、宏是什么? EXCEL MACRO 是一种记录和播放工具,它仅记录您的 Excel 步骤,并且宏将根据需要播放任意多次。 VBA 宏可自动执行重复任务,从而节省了时间。 这是一段可在 Excel 环境中运行的编程代码,但您无需成为编码…...
2023华为杯数学建模研赛思路分享——最全版本A题深度解析
问题回顾: WLAN网络信道接入机制建模 1. 背景 无线局域网(WLAN, wireless local area network)也即Wi-Fi广泛使用,提供低成本、高吞吐和便利的无线通信服务。基本服务集(BSS, basic service set)是WLAN的…...
【校招VIP】测试方案之测试需求分析
考点介绍: 需求分析就是要弄清楚用户需要的是什么功能,用户会怎样使用系统。这样我们测试的时候才能更加清楚的知道系统该怎么样运行,才能更好的设计测试用例,才能更好的测试。 测试方案之测试需求分析-相关题目及解析内容可点击…...
滚珠螺母的清洁方式
滚珠螺母是一种通过滚珠与螺杆进行螺旋运动转换的机械零件,主要用于控制螺杆的运动轨迹和方向,把原来的滑动摩擦利用滚珠的滚动变成滚动摩擦,因此滚珠螺母的摩擦系数大大降低,从而提高了传动效率,要想滚珠螺母达到预期…...
leetcode做题笔记148. 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 思路一:归并排序 c语言解法 struct ListNode* merge(struct ListNode* head1, struct ListNode* head2) {struct ListNode* dummyHead malloc(sizeof(struct ListNode));dummyHead…...
多线程学习
并发:交替运行 并行:一起运行 多线程实现方式 继承Thread类 ①自己定义一个类继承Thread public class MyThread extends Thread{public void run(){}} ②重写run方法 public class MyThread extends Thread{public void run(){"重写的内容&…...
软件测试/测试开发丨ChatGPT在测试计划中的应用策略
点此获取更多相关资料 简介 测试计划是指描述了要进行的测试活动的范围、方法、资源和进度的文档。它主要包括测试项、被测特性、测试任务和风险控制等。 所以在使用ChatGPT输出结果之前,我们需要先将文档的内容框架梳理好,以及将内容范围划定好&…...
链表oj3(Leetcode)——相交链表;环形链表
一,相交链表 相交链表(Leetcode) 1.1分析 看到这个我们首先想到的就是一个一个比较他们的值有相等的就是交点,但是如果a1和b2的值就相等呢?所以这个思路不行,第二种就是依次比较链表,但是这…...
nginx反向代理
nginx反向代理8.反向代理8.1 实现http反向代理8.1.1 反向代理配置参数8.1.2 反向代理单台web服务器8.1.2.1 端口号后加"/"8.1.2.2 端口号后不加"/" 8.1.3指定location 实现反向代理,动静分离8.1.4 反向代理实例:缓存功能8.1.4.1 举例 8.1.5 实现…...
基于eBPF的安卓逆向辅助工具——stackplz
前言 stackplz是一款基于eBPF技术实现的追踪工具,目的是辅助安卓native逆向,仅支持64位进程,主要功能如下: hardware breakpoint 基于pref_event实现的硬件断点功能,在断点处可读取寄存器信息,不会被用户…...
低成本工业机器人:开源六轴机械臂从技术原理到生态落地全指南
低成本工业机器人:开源六轴机械臂从技术原理到生态落地全指南 【免费下载链接】Faze4-Robotic-arm All files for 6 axis robot arm with cycloidal gearboxes . 项目地址: https://gitcode.com/gh_mirrors/fa/Faze4-Robotic-arm 技术原理:打破工…...
RMBG-2.0图文实战手册:发丝/毛边/半透明物体精准抠图案例集
RMBG-2.0图文实战手册:发丝/毛边/半透明物体精准抠图案例集 1. 开篇:当抠图遇上AI魔法 你有没有遇到过这样的烦恼?想给产品拍张美美的白底图,结果边缘总是毛毛糙糙;想给人物换个背景,头发丝却和原背景难舍…...
家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B
家庭实验室:树莓派控制OpenClaw调用远程Qwen3-32B 1. 为什么选择树莓派OpenClaw组合 去年冬天,我在整理家庭实验室设备时发现一个闲置的树莓派4B。这台信用卡大小的电脑曾经用来跑Home Assistant控制智能家居,但后来换了NUC主机就被束之高阁…...
[具身智能-125]:RQT(Robot Qt),一个可以全方位监控ROS2系统内部节点工作状态的可视化超级终端!!!
如果说 RViz2 是机器人的“眼睛”(看 3D 世界),那么 RQT 就是机器人的“听诊器”和“控制台”。它基于 Qt 框架开发,采用插件化架构,让你能在一个窗口里完成对 ROS2 系统内部状态的全方位监控与调试。为了让你更好地利…...
OpenClaw隐私保护实践:GLM-4.7-Flash本地处理敏感数据
OpenClaw隐私保护实践:GLM-4.7-Flash本地处理敏感数据 1. 为什么选择本地化方案处理敏感数据 去年我在处理一批客户合同时遇到了一个棘手问题——合同中包含大量身份证号、银行账号等敏感信息,而团队当时使用的云端AI解析服务需要上传完整文件。虽然服…...
LangGPT:革新自然语言编程的结构化提示词框架
LangGPT:革新自然语言编程的结构化提示词框架 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,Language of GPT, 结构化提示词,结构化Prompt 项目地址: https://gitcod…...
浒浦潮汐表查询2026-03-28
位置:浒浦,日期:2026-03-28,农历:丙午[马]年二月初十,星期:星期六,潮汐类型:小潮死汛最高水位:275.00cm,最低水位:122.00cm࿰…...
MQTT通信中的QoS级别详解:SpringBoot如何选择最适合的传输质量?
MQTT通信中的QoS级别详解:SpringBoot如何选择最适合的传输质量? 在物联网和分布式系统架构中,消息传输的可靠性往往直接关系到业务逻辑的正确性。MQTT协议作为轻量级发布/订阅模式的通信标准,其QoS(服务质量࿰…...
浅析Python中正则表达式的性能优化
在Python开发中,正则表达式是处理文本的利器,但如果使用不当,很容易成为性能瓶颈。尤其是在处理大文本或高频调用场景下,正则的执行效率直接影响整个程序的运行速度。本文将从正则匹配的底层逻辑出发,总结实用的性能优…...
QGIS 3.28 保姆级配置指南:从中文界面到高德底图,手把手搞定智驾地图工作流
QGIS 3.28 智能驾驶地图工程师开箱指南:从零构建高精度工作流 刚拿到工牌的智能驾驶地图工程师小李,面对全新的QGIS界面有些手足无措。作为空间数据处理的核心工具,QGIS的配置直接决定了后续高精地图生产的效率与精度。本文将带你完成从软件…...
