如何将道具及其方法动态传递给 React 中的组件?
How to pass props and their methods dynamically to a component in React?
我有一个动态加载子组件的父组件:
父组件:
// ... lifecycle methods et al
setOverviewRef(ref) {
this.OverviewHeader = ref;
}
setBowSizeCompareRef(ref) {
this.bowSizeCompare = ref;
}
setDualVideoRef(ref) {
this.dualVideoRef = ref;
}
render() {
const showComponent = (componentName, {refToPass, refMethod}) => {
if (typeof this.state[`${componentName}`] !== undefined && this.state[`${componentName}`] !== null) {
const Component = this.state[`${componentName}`].default;
console.log('{refToPass, refMethod}: ', {refToPass, refMethod});
return (
<Component {...{ refToPass: this[`${refMethod}`] }} />
);
} else {
return null;
}
}
return (
<section>
<OverviewHeader overviewRef={this.setOverviewRef} />
{ showComponent('BowSizeCompareComponent', {refToPass: 'bowSizeCompareRef', refMethod: 'setBowSizeCompareRef' }) }
{ showComponent('DualVideoComponent', {refToPass: 'dualVideoRef', refMethod: 'setDualVideoRef' }) }
</section>
);
}
假设我想要 BowSizeCompareComponent,我该如何获取它以便从 showComponent
返回的 Component
的形式为:
<Component bowSizeCompareRef={this.setBowSizeCompareRef} />
如果是DualVideoComponent
,应该是这样的:
<Component dualVideoRef={this.setDualVideoRef} />
我需要将传入的 refObj
的结构修复为 showComponent()
:
render() {
const showComponent = (componentName, refObj) => {
if (typeof this.state[componentName] !== undefined && this.state[componentName] !== null) {
const Component = this.state[componentName].default;
return (
<Component {...refObj} />
);
} else {
return null;
}
};
return (
<section>
<OverviewHeader overviewRef={this.setOverviewRef} />
{ showComponent('BowSizeCompareComponent', {bowSizeCompareRef: this.setBowSizeCompareRef }) }
{ showComponent('DualVideoComponent', {dualVideoRef: this.setDualVideoRef }) }
</section>
);
}
我有一个动态加载子组件的父组件:
父组件:
// ... lifecycle methods et al
setOverviewRef(ref) {
this.OverviewHeader = ref;
}
setBowSizeCompareRef(ref) {
this.bowSizeCompare = ref;
}
setDualVideoRef(ref) {
this.dualVideoRef = ref;
}
render() {
const showComponent = (componentName, {refToPass, refMethod}) => {
if (typeof this.state[`${componentName}`] !== undefined && this.state[`${componentName}`] !== null) {
const Component = this.state[`${componentName}`].default;
console.log('{refToPass, refMethod}: ', {refToPass, refMethod});
return (
<Component {...{ refToPass: this[`${refMethod}`] }} />
);
} else {
return null;
}
}
return (
<section>
<OverviewHeader overviewRef={this.setOverviewRef} />
{ showComponent('BowSizeCompareComponent', {refToPass: 'bowSizeCompareRef', refMethod: 'setBowSizeCompareRef' }) }
{ showComponent('DualVideoComponent', {refToPass: 'dualVideoRef', refMethod: 'setDualVideoRef' }) }
</section>
);
}
假设我想要 BowSizeCompareComponent,我该如何获取它以便从 showComponent
返回的 Component
的形式为:
<Component bowSizeCompareRef={this.setBowSizeCompareRef} />
如果是DualVideoComponent
,应该是这样的:
<Component dualVideoRef={this.setDualVideoRef} />
我需要将传入的 refObj
的结构修复为 showComponent()
:
render() {
const showComponent = (componentName, refObj) => {
if (typeof this.state[componentName] !== undefined && this.state[componentName] !== null) {
const Component = this.state[componentName].default;
return (
<Component {...refObj} />
);
} else {
return null;
}
};
return (
<section>
<OverviewHeader overviewRef={this.setOverviewRef} />
{ showComponent('BowSizeCompareComponent', {bowSizeCompareRef: this.setBowSizeCompareRef }) }
{ showComponent('DualVideoComponent', {dualVideoRef: this.setDualVideoRef }) }
</section>
);
}