const { Component, createRef, forwardRef, Fragment } = React
class App extends Component {
render () {
const Compoent = LogProps(FouseRefs)
return (
<Compoent/>
)
}
}
class FouseRefs extends Component {
render () {
const { inputRef, ...rest } = this.props
return (
<Fragment>
<div>input自动聚焦</div>
<input type="text" ref={inputRef} {...rest} />
</Fragment>
)
}
}
// 定义一个高阶组件
function LogProps (WrapComponent) {
// 接收传入的组件 并加以处理, 如 绑定ref
class WrapCom extends Component {
componentDidMount () {
const { current } = this.ref
console.log(current);
current.focus()
}
render () {
this.ref = createRef()
return (
<WrapComponent inputRef={this.ref} {...this.props} />
)
}
}
// 通过forwardRef 包装 返回出去,即被包装组件即可使用 ref
return forwardRef((props, ref) => {
return <WrapCom />
})
}
ReactDOM.render(<App />, document.getElementById('app'));