【发布时间】:2018-12-31 07:02:19
【问题描述】:
过去几天我一直在修改 React Context API,将它作为一个小型宠物项目制作了一个小型“CMS”。但是我遇到了一个有趣的问题,我一直在考虑它,但实际上我可能想多了,我很乐意收到任何指示,因为我在 Google 中没有找到类似的东西,只有基本的“入门”文章。
假设我们有以下数据模型:
- 文章
- 类别
- 图片
我已经为这些中的每一个创建了一个提供者-消费者对,例如:
const Context = React.createContext();
class ArticleProvider extends React.Component {
this.state = { articles : [] };
render() {
<Context.Provider value={ this.state }>
{this.props.children}
</Context.Provider>
}
}
const ArticleConsumer = (props) => (
<Context.Consumer>
{ props.children }
</Context.Consumer>
);
它们当然比这更充实,但它们都具有相同的结构。 现在我遇到的问题是,当你编辑一篇文章时,你可以选择一个类别和一张图片。
为了解决这个问题,我制作了名为 ArticleForm 的组件。这个表单是一个简单的组件,仅以 props 为参数。
我还有另一个名为 MediaGrid 的组件,用于在单独的页面上显示和上传图像。
所以为了确保 ArticleForm 可以做我想做的所有事情,我制作了以下名为 ArticleFormContainer 的组件,我的想法是我可以重用 MediaGrid 组件:
<ArticleProvider { ...props }>
<CategoryProvider>
<MediaProvider>
<ArticleConsumer>
{ (article) =>
<CategoryConsumer>
{ (category) =>
<MediaConsumer>
{ (media) => <ArticleForm { ...article } { ...category } { ...media } /> }
</MediaConsumer>
}
</CategoryConsumer>
}
</ArticleConsumer>
</MediaProvider>
</CategoryProvider>
</ArticleProvider>
然而,我无法摆脱这种非常忙碌的感觉,而且可能不是最好的方式。
任何想法如何改善这一点?如果这还不够信息,请询问,我会将其余代码发布到 Pastebin 或其他东西中。
谢谢
【问题讨论】:
标签: javascript reactjs react-context