redux 來傳值應該是最好的吧,還有useContext,待更。。。
一.父傳子(簡單-屬性傳值)
// 父組件
import { useState } from 'react'
import ChildCom from './learnUseforward'
const FatherCom = () => {
const [count, setCount] = useState(123456)
return (
<div>
<ChildCom data={ count }/>
</div>
)
}
export default FatherCom
// 子組件
function ChildCom (props) {
return (
<div>
{ props.data }
</div>
)
}
export default ChildCom
二.子傳父(使用useRef)
// 父組件
import { useRef } from 'react'
import { Button} from 'antd'
import ChildCom from './learnUseforward'
const FatherCom = () => {
const childRef = useRef(null)
const handleGetChildData = () => {
const data = childRef.current.getFromData()
console.log('data', data)
}
return (
<div>
<ChildCom ref={ childRef }/>
<Button onClick={() => handleGetChildData()}>我要獲取子組件的數據</Button>
</div>
)
}
export default FatherCom
// 子組件
import { useState, forwardRef, useImperativeHandle } from 'react'
import { Button } from 'antd'
function ChildCom (props, ref) {
const [formValue, setFormValue] = useState({name: 'ky', age: 18})
useImperativeHandle(ref, ()=>({
getFromData: ()=> {
return formValue
}
}))
return (
<div>
我是from組件
</div>
)
}
ChildCom = forwardRef(ChildCom)
//這里用forwardRef包裹住了,LearnUseforward必須以函數聲明,不能是變量聲明
export default ChildCom