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

相关推荐
by__csdn2 小时前
Node.js版本与npm版本的对应关系
前端·npm·node.js
AI_56782 小时前
Webpack性能优化终极指南:4步实现闪电打包
前端·webpack·性能优化
xuehuayu.cn2 小时前
js es6 class 类中的值是异步赋值, 子类中如何获取这个值?
javascript·es6
威风的虫2 小时前
ES6 数组方法:告别循环,拥抱函数式编程
开发语言·前端·javascript
小杨快跑~2 小时前
ES6 Promise:告别回调地狱的异步编程革命
前端·javascript·ecmascript·es6
linweidong3 小时前
VIVO前端面试题及参考答案
前端·跨域·localstorage·重绘·浏览器兼容·git管理·前端重构
有意义3 小时前
从零搭建:json-server+Bootstrap+OpenAI 全栈 AI 小项目
前端·后端·llm
温宇飞3 小时前
CCState:为大型 Web 应用设计的状态管理库
前端
r0ad3 小时前
读诗的时候我却使用了自己研发的Chrome元素截图插件
前端·javascript·chrome
IT_陈寒4 小时前
React性能优化实战:这5个Hooks技巧让我的应用快了40%
前端·人工智能·后端