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

相关推荐
我是伪码农26 分钟前
Vue 1.26
前端·javascript·vue.js
晚霞的不甘1 小时前
Flutter for OpenHarmony 创意实战:打造一款炫酷的“太空舱”倒计时应用
开发语言·前端·flutter·正则表达式·前端框架·postman
2601_949480061 小时前
Flutter for OpenHarmony音乐播放器App实战:定时关闭实现
javascript·flutter·原型模式
这儿有一堆花1 小时前
CSS 拟真光影设计:从扁平到深度的技术复盘
前端·css
lcc1872 小时前
React 路由
react.js
_OP_CHEN2 小时前
【前端开发之CSS】(三)CSS 常用元素属性宝典(上):从字体到文本,手把手教你打造高颜值网页!
前端·css·html·网页开发·文本属性·字体属性·页面美化
你脸上有BUG3 小时前
【工程化】记给ant-design-vue打补丁的示例
前端·javascript·vue.js·补丁·ant-design-vue
晚霞的不甘3 小时前
Flutter for OpenHarmony 进阶实战:打造 60FPS 流畅的物理切水果游戏
javascript·flutter·游戏·云原生·正则表达式
雨季6663 小时前
构建 OpenHarmony 文本高亮关键词标记器:用纯字符串操作实现智能标注
开发语言·javascript·flutter·ui·ecmascript·dart
你这个代码我看不懂3 小时前
Vue子父组件.sync
javascript·vue.js·ecmascript