【React】组件通信

1. 组件通信

  • 组件间的数据传递
1.1 父传子

步骤:

  1. 父组件传递数据------在子组件标签上绑定属性
  2. 子组件接收数据------子组件通过props参数接收数据
javascript 复制代码
function Son(props) {
  return <div>{props.value}</div>
}

function App() {
  const value = '父组件传给子组件的值'
  return (
    <div className="App">
      <Son value={value} />
    </div>
  );
}

export default App;

-props说明:

javascript 复制代码
function Son(props) {
  console.log('props', props)
  return <div>{props.value}</div>
}

function App() {
  const value = '父组件传给子组件的值'
  return (
    <div className="App">
      <Son
        value={value}
        age={100}
        list={['a', 'b']}
        obj={{ key: 11 }}
        isTrue={false}
        clickButton={() => {console.log('click button')}}
        dom={<span>hello</span>}
      />
    </div>
  );
}

export default App;
  • 特色的prop ------ children
javascript 复制代码
function Son(props) {
  return <div>我是子组件 {props.children}</div>
}

function App() {
  return (
    <div className="App">
      <Son>
        <div>我就是那个特殊的prop</div>
      </Son>
    </div>
  );
}

export default App;
1.2 子传父
  • 核心思路:子组件调用父组件的函数并传递参数
javascript 复制代码
function Son(props) {
  return <button onClick={() => props.onUpdateMsg('子组件中的数据,我要传给父组件')}>click me</button>
}

function App() {
  function getSonMsg(msg) {
    alert(msg)
  }
  return (
    <div className="App">
      <Son onUpdateMsg={getSonMsg} />
    </div>
  );
}

export default App;

1.3 兄弟组件传值 ------ 状态提升

  • 核心:传给共同的父组件,进行数据传递(子传父 + 父
    姐姐:爸爸,你跟妹妹说我是她姐姐
    爸爸:妹妹,你姐说你是她的妹妹
    哈哈哈哈哈哈哈
javascript 复制代码
import { useState } from 'react'
function BigSister(props) {
  return <button onClick={() => props.onUpdateMsg('爸爸,告诉妹妹我是她姐姐')}>click me</button>
}

function SmallSister(props) {
  return <div>姐姐对妹妹说的:{props.value}</div>
}

function App() {
  const [bigToSmallMsg, setBigToSmallMsg] = useState('');
  function getBigSisterMsg(msg) {
    setBigToSmallMsg(msg)
  }
  return (
    <div className="App">
      <BigSister onUpdateMsg={getBigSisterMsg} />
      <SmallSister value={bigToSmallMsg} />
    </div>
  );
}

export default App;

1.4 跨层组件通信 ------ context

javascript 复制代码
import { createContext, useContext } from 'react'
// step 1
const MoneyContext = createContext()
function Father(props) {
  return <div>
    我是爸爸
    <Son />
  </div>
}

function Son(props) {
  // step 3:消费
  const money = useContext(MoneyContext)
  return <div>
    我是儿子 ------
    <span>这是我爷爷留给我的财产:{money}</span>
  </div>
}

function App() {
  const money = 100000000
  return (
    // step 2: 提供
    <MoneyContext.Provider value={money}>
      <div className="App">
        我是爷爷
        <Father />
      </div>
    </MoneyContext.Provider>
  );
}

export default App;

参考

黑马程序员react教程

相关推荐
八角丶1 小时前
Node 网络编程 —— TLS 模块
javascript·后端·node.js
倔强的石头1061 小时前
【Linux指南】动静态库系列(七):符号表与重定位:链接器如何把函数调用接起来
linux·前端·javascript
图扑软件1 小时前
中篇・运笔|统一 DataModel 底座,HT UI 组件万物同源
javascript·低代码·ui·性能优化·数据可视化
a1117762 小时前
3D 脑图谱 / Bilingual 3D Brain Atlas 项目
前端
T1mzhou2 小时前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
小小尚@3 小时前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
葡萄城技术团队3 小时前
工业数据可视化:使用活字格 AIcoding + Three.js 构建轻量化三维设备监控大屏
开发语言·javascript·信息可视化
默_笙3 小时前
🚍 一条 Todo 的奇幻漂流:TypeScript 全栈类型安全的"护照检查"
前端·javascript
计算机魔术师4 小时前
NVIDIA 以 129.3 亿美元收购 Hugging Face
前端
平头哥技术团队4 小时前
Day 01 | 用 HTML 写第一个网页:双击就能在浏览器打开
前端