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。

相关推荐
IT_陈寒26 分钟前
Vue的v-for里用index当key,我被自己坑惨了
前端·人工智能·后端
代码不加糖1 小时前
0基础搭建前后端分离项目:实现菜单与界面左右布局
java·前端·javascript·mysql·elementui·mybatis
zhensherlock2 小时前
Protocol Launcher 系列:Tally 快速计数器的深度集成
前端·javascript·typescript·node.js·自动化·github·js
AC赳赳老秦2 小时前
OpenClaw权限管理实操:团队共享Agent,设置操作权限,保障数据安全
服务器·开发语言·前端·javascript·excel·deepseek·openclaw
光影少年2 小时前
Polyline 组件如何绘制渐变区域?
前端·javascript·掘金·金石计划
Pkmer2 小时前
古法编程: React思维模型快速建立
前端·react.js
普通网友2 小时前
JavaScript:ESLint+Prettier 规范代码格式
开发语言·javascript·ecmascript
jiayong232 小时前
第 38 课:任务列表里高亮当前正在查看详情的任务
开发语言·前端·javascript·vue.js·学习
anOnion3 小时前
构建无障碍组件之Spinbutton Pattern
前端·html·交互设计
程序员Better3 小时前
前端成功转型AI全栈,我踩过的坑都替你填上了
前端·后端·ai编程