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

React拆分组件中的传值问题

在我们实际项目开发中,很多时候为为了项目后期便于维护,都会将相关的组件进行拆分,拆分过后,会将数据方法在父组件中进行编写,然后将一些逻辑拆分为组件,在这个过程中,最重要的就是数据的传递,常用的主要有以下几种
1、父传子 — props
父组件传递数据 — 在子组件标签上绑定属性
子组件接收数据 — 子组件通过props参数接收数据

/*** 父传子* 父组件传递数据 子组件标签身上绑定数据* 子组件接收数据 props参数**/
function Son(props) {console.log(props);return <div>this is son,{props.name}</div>;
}function App() {const name = "this is app name";return (<div><Son name={name}></Son></div>);
}

props说明:

  1. props可以传递任意的数据,如:数字、字符串、数组、对象、函数、JSX
  2. props是只读对象,子组件只能读取props中的数据,不能直接进行修改,父组件的数据只能由父组件修改
    特殊的prop children:
    把内容嵌套在子组件标签中时,父组件会自动在名为children的prop属性中接收该内容
function Son(props) {console.log(props);return <div>this is son,{props.children}</div>;
}function App() {return (<div><Son>this is span</Son></div>);
}

2、子传父
在子组件中调用父组件中的函数并传递参数

function Son({ onGetSonMsg }) {const sonMsg = "this is son msg";return (<div>this is son<button onClick={() => onGetSonMsg(sonMsg)}>sendMsg</button></div>);
}function App() {const getMsg = (msg) => {console.log(msg);};return (<div>this is App<Son onGetSonMsg={getMsg}></Son></div>);
}

3、兄弟组件通信
借助状态提升机制,通过父组件·进行兄弟组件之间的数据传递

  1. A组件通过子传父把数据传递给父组件App
  2. App拿到数据后通过父传子的方式再传给B组件
function A({ onGetAName }) {const name = "this is A name";return (<div>this is A<button onClick={() => onGetAName(name)}>send</button></div>);
}function B({ name }) {return <div>this is B,{name}</div>;
}function App() {const [name, setName] = useState("");const getAName = (name) => {console.log(name);setName(name);};return (<div>this is App<A onGetAName={getAName}></A><B name={name}></B></div>);
}

除了上述几种方法外,我们有时候还会用到Redux和Mobx这些状态管理库来进行传递一些数据,Redux可以看这篇文章
https://blog.csdn.net/qq_60754128/article/details/143836269?spm=1001.2014.3001.5502

以上是常见的进行传值的方法

http://www.lryc.cn/news/491018.html

相关文章:

  • RocketMQ的使⽤
  • Android Studio 设置不显示 build-tool 无法下载
  • 【Y20030007】基于java+servlet+mysql的垃圾分类网站的设计与实现(附源码 配置 文档)
  • 细说敏捷:敏捷四会之standup meeting
  • ThinkPHP8使用workerman
  • C语言超详细教程
  • [开源]3K+ star!微软Office的平替工具,跨平台,超赞!
  • 如何借助计算机视觉算法通过识别水尺精准识别水位
  • C++(进阶) 第1章 继承
  • 获国家权威机构认可 亚信安全荣获CNVD技术组支撑单位认证
  • 2. Autogen官网教程 (Terminating Conversations Between Agents)
  • java 排序 详解
  • 【数据集】城市通量塔站点观测数据
  • scau编译原理综合性实验
  • ETAS工具导入DBC生成Com协议栈
  • 表单校验规则
  • 接口的扩展
  • 新能源电机轴承电腐蚀,如何破?
  • Java中的File和IO流
  • ls命令实操笔记
  • 线段数--算法
  • JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)
  • 低温存储开关机问题
  • mysql系列1—mysql架构和协议介绍
  • 设计模式——模板模式
  • CV22_语义分割基础
  • Dubbo源码解析-Dubbo的线程模型(九)
  • 【Canvas与标志】圆角三角形生化危险警示标志
  • 解决Dcat Admin laravel框架登录报错问题,(blocked:mixed-content)
  • (三)Sping Boot学习——升级jdk1.8-jdk18