小编Ste*_*ren的帖子

使用HOC组件反应重建树(导致输入字段焦点丢失)

我正在使用高阶组件来装饰我的组件.

const HOC = (WrappedComponent) => (props) => {
    return (
        <span>
            <p>HOC Comp</p>
            <WrappedComponent {...props}/>
        </span>
    )
}
Run Code Online (Sandbox Code Playgroud)

我喜欢这里解释的这种模式:深入反应高阶组件

但是我有一个问题,因为HOC导致React重新创建我的组件树而不是更新树.这里很好地解释了React Reconciliation.HOC返回一个匿名函数,React不知道它实际上是在渲染相同的组件.这对性能不利,使我的输入字段失去焦点.

如果没有React重新创建我的树,我怎么能使用HOC组件render()呢?

示例代码:

class Input extends React.Component {
    componentWillMount() {
        console.log('input component will mount');
    }

    componentWillUnmount() {
        console.log('input component will unmount');
    }

    render() {
        return (
            <span>
                <input value={this.props.value} onChange={this.props.onChange}/>
            </span>
        );
    }
}

const HOC = (WrappedComponent) => {
    const Help = (props) => {
        return (
            <span>
                <WrappedComponent {...props}/>
                <p>{props.help}</p>
            </span>
        ) …
Run Code Online (Sandbox Code Playgroud)

reactjs

7
推荐指数
1
解决办法
802
查看次数

标签 统计

reactjs ×1