我正在尝试使用 ES6 语法构建一个 ReactJS 高阶组件。这是我的尝试:
export const withContext = Component =>
class AppContextComponent extends React.Component {
render() {
return (
<AppContextLoader>
<AppContext.Consumer>
{context => <Component {...props} context={context} />}
</AppContext.Consumer>
</AppContextLoader>
);
}
};
在这里,AppContextLoader
从数据库中获取上下文并将其提供给上下文,如下所示:
class AppContextLoader extends Component {
state = {
user: null,
};
componentWillMount = () => {
let user = databaseProvider.getUserInfo();
this.setState({
user: user
});
};
render = () => {
return (
<AppContext.Provider value={this.state}>
{this.props.children}
</AppContext.Provider>
);
};
}
export default AppContextLoader;
和用法:
class App extends Component {
static propTypes = {
title: PropTypes.string,
module: PropTypes.string
}
render = () => {
return (
withContext(
<Dashboard
module={this.props.module}
title={this.props.title}
/>
);
export default App;
出于某种原因,我的包装组件 ( Dashboard
) 没有获得我的context
财产,只有原始的 (title
和module
)。
如何使用 ES6 语法正确编写 HOC?