使用重组组件作为 ref 时丢失功能
losing functions when using recompose component as ref
我有这个简单的组件
class App extends React.Component {
a = () => null
b = () => null
c = () => null
render() {
return (<div>hey123</div>)
}
}
这是我的第二个组件,参考了第一个组件
class BApp extends React.Component {
setComponentRef = ref => {
console.log('ref', ref)
this.playerComponentRef = ref
}
render() {
return (
<div>
<App ref={this.setComponentRef} />
</div>)
}
}
在这种情况下,在 console.log 我将接收所有 App 组件的功能 (a, b, c)
但如果我在 App
组件上使用 Recompose.withState
,我将不会再收到它们。看这里的例子
https://codepen.io/anon/pen/qYjpoE?editors=1111
查看swtich的工作方式
<ModifyedApp ref={this.setComponentRef} />
到
<App ref={this.setComponentRef} />
我在这里错过了什么?为什么使用 Recompose HOC 会删除 App
class 组件内部函数?
谢谢。
HOC 将在子组件之外创建一个新组件。因此,如果您在 HOC 中包装子组件并尝试接收包装组件的引用,您将获得 HOCs ref.
这里有一个解决方法 - 只需将 ref 从父组件传递给 hoc 中的子组件 - 只需代理 ref。
您可以将函数 providerRef
传递给您的组件,然后向其提供 App 实例,例如
class BApp extends React.Component {
setComponentRef = ref => {
console.log('ref', ref)
this.playerComponentRef = ref
}
render() {
return (
<div>
<App providerRef={this.setComponentRef} />
</div>)
}
}
class App extends React.Component {
a = () => null
b = () => null
c = () => null
componentDidMount() {
this.props.providerRef(this);
}
render() {
return (<div>hey123</div>)
}
}
在 Recompose 的情况下,它是一个 HOC,因此 ref 将应用于 HOC 而不是内部组件,一些库提供了一个 withRef
钩子来使用 this.playerComponentRef.getWrappedInstance()
访问 innerComponent ref ,但是我不确定它在 recompose
.
中的可用性
我有这个简单的组件
class App extends React.Component {
a = () => null
b = () => null
c = () => null
render() {
return (<div>hey123</div>)
}
}
这是我的第二个组件,参考了第一个组件
class BApp extends React.Component {
setComponentRef = ref => {
console.log('ref', ref)
this.playerComponentRef = ref
}
render() {
return (
<div>
<App ref={this.setComponentRef} />
</div>)
}
}
在这种情况下,在 console.log 我将接收所有 App 组件的功能 (a, b, c)
但如果我在 App
组件上使用 Recompose.withState
,我将不会再收到它们。看这里的例子
https://codepen.io/anon/pen/qYjpoE?editors=1111
查看swtich的工作方式
<ModifyedApp ref={this.setComponentRef} />
到
<App ref={this.setComponentRef} />
我在这里错过了什么?为什么使用 Recompose HOC 会删除 App
class 组件内部函数?
谢谢。
HOC 将在子组件之外创建一个新组件。因此,如果您在 HOC 中包装子组件并尝试接收包装组件的引用,您将获得 HOCs ref.
这里有一个解决方法 - 只需将 ref 从父组件传递给 hoc 中的子组件 - 只需代理 ref。
您可以将函数 providerRef
传递给您的组件,然后向其提供 App 实例,例如
class BApp extends React.Component {
setComponentRef = ref => {
console.log('ref', ref)
this.playerComponentRef = ref
}
render() {
return (
<div>
<App providerRef={this.setComponentRef} />
</div>)
}
}
class App extends React.Component {
a = () => null
b = () => null
c = () => null
componentDidMount() {
this.props.providerRef(this);
}
render() {
return (<div>hey123</div>)
}
}
在 Recompose 的情况下,它是一个 HOC,因此 ref 将应用于 HOC 而不是内部组件,一些库提供了一个 withRef
钩子来使用 this.playerComponentRef.getWrappedInstance()
访问 innerComponent ref ,但是我不确定它在 recompose
.