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。

相关推荐
天平1 小时前
油猴脚本创建webworker踩坑记录
前端·javascript·typescript
原则猫3 小时前
前端基础大厦
前端
陈随易4 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·后端·程序员
SoaringHeart5 小时前
Flutter进阶:基于 EasyRefresh 的下拉刷新封装 n_easy_refresh_mixin.dart
前端·flutter
IT_陈寒6 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰7 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
山河木马7 小时前
渲染管线-计算得到gl_Position(顶点着色器)之后续GPU流程
javascript·webgl·图形学
竹林8188 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
妙码生花8 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
Awu12279 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude