我有一个像这样的组件:
class Person extends React.Component {
render() {
const { language } = this.props;
return (
<div>
I speak {language}
</div>
);
}
}
还有一个像这样的高阶组件:
export default (BaseComponent) =>
class extends React.Component {
render() {
return <BaseComponent language="English" />;
}
}
我用过它们:
class PersonList extends Component {
render() {
const NewPerson = hoc(Person)
return <NewPerson />;
}
}
非常好,它输出了我想要的
I speak English
但是,如果我希望 PersonList 组件呈现从其父级传递的内容而不是导入的内容,如下所示:
render(
<PersonList>
<Person />
</PersonList>,
document.getElementById('app')
)
现在,
const NewPerson = hoc(Person)
引发错误。
我知道我可以像这样修复 HOC
return <div>{React.cloneElement(BaseComponent, { language: "English" })}</div>
但这是一个重大变化,我不想这样做。
无论如何我可以在不破坏我的 HOC 的情况下归档我的目标(HOC 组件呈现传递而不是导入的东西)?
或者有什么解决办法?