react传值

在React中,父组件向子组件传递数据是通过props实现的,而子组件向父组件传递数据则需要通过回调函数的方式。对于爷孙组件之间的通信,可以通过在中间组件上设置props和回调函数来传递数据。兄弟组件之间的通信则需要通过共享状态或者通过父组件来进行中转。

以下是一些基本的示例代码:

1. 父传子:

父组件:

复制代码
import React from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = () => {
  const dataFromParent = "Hello from parent";

  return (
    <div>
      <ChildComponent dataFromParent={dataFromParent} />
    </div>
  );
}

export default ParentComponent;

子组件:

复制代码
import React from 'react';

const ChildComponent = (props) => {
  return (
    <div>
      <p>{props.dataFromParent}</p>
    </div>
  );
}

export default ChildComponent;

2. 子传父:

父组件:

复制代码
import React, { useState } from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = () => {
  const [dataFromChild, setDataFromChild] = useState("");

  const handleDataFromChild = (data) => {
    setDataFromChild(data);
  }

  return (
    <div>
      <p>Data from child: {dataFromChild}</p>
      <ChildComponent onDataFromChild={handleDataFromChild} />
    </div>
  );
}

export default ParentComponent;

子组件:

复制代码
import React from 'react';

const ChildComponent = (props) => {
  const sendDataToParent = () => {
    const data = "Hello from child";
    props.onDataFromChild(data);
  }

  return (
    <div>
      <button onClick={sendDataToParent}>Send Data to Parent</button>
    </div>
  );
}

export default ChildComponent;

3. 爷孙组件传值:

爷爷组件:

复制代码
import React, { useState } from 'react';
import ParentComponent from './ParentComponent';

const GrandparentComponent = () => {
  const [dataFromGrandchild, setDataFromGrandchild] = useState("");

  const handleDataFromGrandchild = (data) => {
    setDataFromGrandchild(data);
  }

  return (
    <div>
      <p>Data from grandchild: {dataFromGrandchild}</p>
      <ParentComponent onDataFromGrandchild={handleDataFromGrandchild} />
    </div>
  );
}

export default GrandparentComponent;

父组件:

复制代码
import React from 'react';
import ChildComponent from './ChildComponent';

const ParentComponent = (props) => {
  return (
    <div>
      <ChildComponent onDataFromGrandchild={props.onDataFromGrandchild} />
    </div>
  );
}

export default ParentComponent;

子组件:

复制代码
import React from 'react';

const ChildComponent = (props) => {
  const sendDataToGrandparent = () => {
    const data = "Hello from grandchild";
    props.onDataFromGrandchild(data);
  }

  return (
    <div>
      <button onClick={sendDataToGrandparent}>Send Data to Grandparent</button>
    </div>
  );
}

export default ChildComponent;

4. 兄弟组件传值:

在React中,兄弟组件之间的通信通常需要通过共享状态,可以将状态提升到它们的共同的父组件中,然后通过props传递给兄弟组件。

父组件:

复制代码
import React, { useState } from 'react';
import BrotherComponentA from './BrotherComponentA';
import BrotherComponentB from './BrotherComponentB';

const ParentComponent = () => {
  const [sharedData, setSharedData] = useState("");

  const handleDataChange = (data) => {
    setSharedData(data);
  }

  return (
    <div>
      <BrotherComponentA onSharedDataChange={handleDataChange} />
      <BrotherComponentB sharedData={sharedData} />
    </div>
  );
}

export default ParentComponent;

兄弟组件A:

复制代码
import React from 'react';

const BrotherComponentA = (props) => {
  const sendDataToBrotherB = () => {
    const data = "Hello from Brother A";
    props.onSharedDataChange(data);
  }

  return (
    <div>
      <button onClick={sendDataToBrotherB}>Send Data to Brother B</button>
    </div>
  );
}

export default BrotherComponentA;

兄弟组件B:

复制代码
import React from 'react';

const BrotherComponentB = (props) => {
  return (
    <div>
      <p>Data from Brother A: {props.sharedData}</p>
    </div>
  );
}

export default BrotherComponentB;

这些是基本的示例,实际应用中根据具体情况可能需要更复杂的状态管理工具,如Redux或者Context API。

相关推荐
用户老李22 分钟前
相机模型与标定自学教程 02:外参 \[R | t] 与完整投影链路
前端
Dream-Y.ocean31 分钟前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
用户老李35 分钟前
无线电自学教程 03:电路基础——从欧姆定律到 LC 谐振
前端
申君健248641827720236 分钟前
ESM 源码发布 + 显式子路径导出
前端
大龄秃头程序员39 分钟前
实践 iOS Touch 响应链:从 sendEvent 到 nextResponder 的完整闭环
前端
用户老李43 分钟前
YOLO 目标检测自学教程 05:动手——从零实现 mini-YOLOv1
前端
用户老李43 分钟前
视频编码自学教程 02:颜色与色彩空间——从 RGB 到 Y'CbCr 4:2:0
前端
用户老李1 小时前
无线电自学教程 02:数学工具箱——正弦、复数、相量与分贝
前端
lpp191 小时前
一个网页的完整一生:从敲网址到页面显示,中间发生了什么
前端
春涧草茶2 小时前
慢就是快16-1协程
开发语言·前端·python