1. 组件通信
- 组件间的数据传递
1.1 父传子
步骤:
- 父组件传递数据——在子组件标签上绑定属性
- 子组件接收数据——子组件通过props参数接收数据
function Son(props) {
return <div>{props.value}</div>
}
function App() {
const value = '父组件传给子组件的值'
return (
<div className="App">
<Son value={value} />
</div>
);
}
export default App;
-props说明:
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
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 子传父
- 核心思路:子组件调用父组件的函数并传递参数
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 兄弟组件传值 —— 状态提升
- 核心:传给共同的父组件,进行数据传递(子传父 + 父
姐姐:爸爸,你跟妹妹说我是她姐姐
爸爸:妹妹,你姐说你是她的妹妹
哈哈哈哈哈哈哈
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
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教程