【发布时间】:2021-08-20 07:14:03
【问题描述】:
美好的一天。我正在构建一个组件树,并希望在树的其他组件中使用根组件的功能。我通过所有树抛出函数引用。 如果我需要从非根组件中的函数获取值,我也会使用该对象。 你能帮助我吗? 你能告诉我如何作为 HOC 做到这一点吗? 如果您在我的代码上显示示例并不难。
import React from 'react';
class Page extends React.Component{
Answer = {
value : ''
}
doSomething(){
console.log(this.Answer.value);
console.log('Ready!');
}
render(){
return(
<div>
<div>
<Body
ParentFunc={()=>this.doSomething()}
ParentParameters={this.Answer}
/>
</div>
</div>
)
}
}
export default Page
class Body extends React.Component{
render(){
const{
ParentFunc,
ParentParameters
} = this.props
return(
<div>
<div>
<SomeComponent
ParentFunc={()=>ParentFunc()}
ParentParameters={ParentParameters}
/>
</div>
</div>
)
}
}
class SomeComponent extends React.Component{
getAnswer(){
const{
ParentFunc,
ParentParameters
} = this.props
ParentParameters.value = 'Some text'
ParentFunc()
}
render(){
return(
<div onClick={()=>this.getAnswer()}>
We can?
</div>
)
}
}
【问题讨论】:
-
您到底想从什么中创建高阶组件? “想在树的其他组件中使用根组件的功能”听起来更像是您想创建一个上下文提供程序并提供通过上下文调用的函数。
-
注意!不要使用上下文来避免将属性向下传递多个级别。真正的需求出现在必须在不同级别的许多组件中提供相同数据的情况下。
-
那么,您想要创作哪些尚未创作的作品?您的问题不清楚。
-
我明白了,如果您指的是the before you use context 部分,这只是说您可以将
<div onClick={()=>this.getAnswer()}>...<包含在一个道具中,然后将其传递给Body和SomeComponent。
标签: reactjs design-patterns react-hoc