提问者:小点点

前裁判无效


我来自这个线程:如何在基于类的组件中使用React.forwardRef?我也非常仔细地浏览了文档,但是我的参考转发似乎根本不起作用。

要创建引用的组件:

class TextEditor extends Component {
    constructor(props: Props) {
        this.editor = createRef();
    }

    render() {
        console.log(this.editor) // -> This is always empty
        return (
            <BaseEditor ref={this.editor}/>
        );
    }
}

要接收ref的组件:

class BaseEditor extends Component<Props> {

    render() {
        return (
            <Editor ref={this.props.innerRef}/>
        );
    }
}

const BaseEditorForwardRef = React.forwardRef((props: any, ref: any) => (
    <BaseEditor {...props} innerRef={ref} />
));

export default connect(mapStateToProps, mapDispatchToProps)(BaseEditorForwardRef)

我觉得一切都在它应该去的地方。但是,如果我在转发ref时未使用React,则ref在textdeditor中不存在。forwardRef一切正常。

有人知道我做错了什么吗?


共2个答案

匿名用户

您需要将ref传递给已经连接redux的组件(我没有用redux尝试过,但是用另一个HOC,我希望它对你有用):

class BaseEditor extends Component<Props> {

    render() {
        return (
            <Editor ref={this.props.innerRef}/>
        );
    }
}

const Connected = connect(mapStateToProps, mapDispatchToProps)(BaseEditor)


const BaseEditorForwardRef = React.forwardRef((props: any, ref: any) => (
    <Connected {...props} innerRef={ref} />
));

export default BaseEditorForwardRef

匿名用户

连接将创建一个具有自己的ref的全新组件。但是,React Redux实际上为连接提供了一个允许转发ref的选项。

如果已将{转发dRef: true}传递给连接,则向连接的包装器组件添加ref将实际返回包装组件的实例。

https://react-redux.js.org/api/connect#forwardref-布尔值