我来自这个线程:如何在基于类的组件中使用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
有人知道我做错了什么吗?
您需要将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-布尔值