react高阶组件中,更新state时,用ref获取的实例为null

发布于 2022-09-06 02:45:10 字数 1588 浏览 27 评论 0

MyContainer高阶组件中,使用ref获取MyComponent的实例,但是在更新state时。proc函数中instance会输出两次,第一次为null值。不知道是为什么?求解答。

import React from 'react';
import ReactDOM from 'react-dom';

const MyContainer = (WrappedCompoent) => {
    return class extends React.Component {
        constructor (props) {
            super(props)
            this.state = {
                name: ""
            }
            this.onNameChange = this.onNameChange.bind(this)
        }
        onNameChange (event) {
            this.setState({
                name: event.target.value
            })
        }
        proc (instance) {
            console.log(instance); //state更新时,会log两次,第一次为null
            instance && instance.test()
        }
        render () {
            const newProps = Object.assign({
                text: "newText",
                name: {
                    value: this.state.name,
                    onChange: this.onNameChange
                }
            }, this.props, {ref: this.proc.bind(this)})
            return (
                <div>
                    <WrappedCompoent {...newProps}/>
                </div>
            )
        }
    }
}

@MyContainer
class MyComponent extends React.Component {
    test () {
        console.log(123);
    }
    render () {
        return <div>{this.props.text}<input name="name" {...this.props.name}/></div>
    }
}

ReactDOM.render(
    <div><MyComponent/></div>,
    document.getElementById('root')
)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文