【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教程

相关推荐
蓝胖子的多啦A梦6 分钟前
搭建前端项目 Vue+element UI引入 步骤 (超详细)
前端·vue.js·ui
TE-茶叶蛋8 分钟前
WebSocket 前端断连原因与检测方法
前端·websocket·网络协议
骆驼Lara18 分钟前
前端跨域解决方案(1):什么是跨域?
前端·javascript
离岸听风21 分钟前
学生端前端用户操作手册
前端
onebyte8bits23 分钟前
CSS Houdini 解锁前端动画的下一个时代!
前端·javascript·css·html·houdini
yxc_inspire27 分钟前
基于Qt的app开发第十四天
前端·c++·qt·app·面向对象·qss
一_个前端34 分钟前
Konva 获取鼠标在画布中的位置通用方法
前端
一点也不想取名1 小时前
解决 Java 与 JavaScript 之间特殊字符传递问题的终极方案
java·开发语言·javascript
[email protected]2 小时前
Asp.Net Core SignalR导入数据
前端·后端·asp.net·.netcore
小满zs6 小时前
Zustand 第五章(订阅)
前端·react.js