一、組件通過ref傳值
1、方式一

2、方式二

當配合withRouter,獲取路由的屬性(獲取請求的url等參數的時候)報錯:
二、Hook的用法
問題:

解決:
組件間通信除了props外還有onRef方法,不過React官方文檔建議不要過度依賴ref。本文使用onRef語境為在表單錄入時提取公共組件,在提交時分別獲取表單信息。
下面demo中點擊父組件按鈕可以獲取子組件全部信息,包括狀態和方法,可以看下demo中控制台打印。
父組件代碼如下:
// 父組件 class Parent extends React.Component { testRef=(ref)=>{ this.child = ref console.log(ref) // -> 獲取整個Child元素 } handleClick=()=>{ alert(this.child.state.info) // -> 通過this.child可以拿到child所有狀態和方法 } render() { return <div> <Child onRef={this.testRef} /> <button onClick={this.handleClick}>父組件按鈕</button> </div> } }
子組件代碼如下:
// 子組件 class Child extends React.Component { constructor(props) { super(props) this.state = { info:'快點擊子組件按鈕哈哈哈' } } componentDidMount(){ this.props.onRef(this) console.log(this) // ->將child傳遞給this.props.onRef()方法 } handleChildClick=()=>{ this.setState({info:'通過父組件按鈕獲取到子組件信息啦啦啦'}) } render(){ return <button onClick={this.handleChildClick}>子組件按鈕</button> } }
