【发布时间】:2017-06-24 02:50:27
【问题描述】:
我有一个显示配方的反应组件。该组件可用于查看数据和编辑数据,具体取决于传递给它的“编辑”道具。
目前我有一些条件逻辑,它将根据用户是要编辑还是查看食谱来隐藏/显示某些元素。这是我的渲染函数:
render() {
let buttons = null;
if (this.props.edit === 'true') {
buttons = <div className="buttonList">
<button onClick={this.onSave} className='defaultBtn'>Save</button>
<button onClick={this.goBack} className='defaultBtn'>Discard Changes</button>
</div>;
} else {
buttons = <div className="buttonList">
<button onClick={this.goBack} className='defaultBtn'>Back</button>
</div>;
}
return (
<div className="single">
<img src={this.state.recipe.imageURL} />
<div className='recipeDetails'>
<h1>{this.state.recipe.name}</h1>
{this.props.edit === 'true' > 0 &&
<TextField type='text' floatingLabelText='Image URL' onChange={this.onImageUrlChange}></TextField>
}
<IngredientList onIngredientChange={this.onIngredientChange}
onDelete={this.onDelete}
ingredients={this.state.recipe.ingredients}
edit={this.props.edit}
addIngredient={this.addIngredient} />
{buttons}
</div>
</div>
);
}
这是实现这一目标的最佳方式吗?使用这样的 if 语句对我来说是错误的。我觉得我应该有一个 ViewRecipe 组件和一个 EditRecipe 组件,它们共享大部分代码,但有一些逻辑来隐藏和显示相关元素。是否有特定的 React 模式可以做到这一点?我读过一些关于高阶组件的文章,但不确定它们是否适合这个特定问题。
我是否过于复杂了? 我应该只有两个独立的组件吗? 编辑方面的大部分逻辑。
【问题讨论】:
标签: reactjs design-patterns jsx