【发布时间】:2017-02-20 07:30:11
【问题描述】:
我正在使用一个呈现字典列表的组件。我想有选择地传入一个可以插入额外列表元素的道具。
...
render() {
return (
<dl>
!! Optional !!
<dt>{this.props.optionalPropObj.label}</dt>
<dd>{this.props.optionalPropObj.value}</dd>
!! Optional !!
<dt>Label One</dt>
<dd>{this.props.foo.one}</dd>
<dt>Label Two</dt>
<dd>{this.props.foo.two}</dd>
<dt>Label Three</dt>
<dd>{this.props.foo.Three}</dd>
...
</dl>
);
}
有几种方法可以做到这一点,但我想尽量减少这种行为的逻辑足迹。主要问题是因为 React 需要一个包装元素,而 <dt> 和 <dd> 是子元素。
我可以分成两个回报,这是非常低效的:
...
if (this.props.optionalPropObj) {
return (
<dl>
// Include optional prop list element
</dl>
);
} else {
return (
<dl>
// Exclude optional prop list element
</dl>
);
}
我可以用一个 css 类隐藏它们,但是我有 4 个条件:
return (
<dl>
<dt className={this.props.optionalPropObj ? '' : 'hidden'}>
{this.props.optionalPropObj && this.props.optionalPropObj.label}
</dt>
<dd className={this.props.optionalPropObj ? '' : 'hidden'}>
{this.props.optionalPropObj && this.props.optionalPropObj.value}
</dd>
</dl>
);
如果我可以将元素包装在一个 div 中,这种情况将是微不足道的。
return (
...
{includeOptional && <OptionalThing />}
or
{includeOptional ? <OptionalThing /> : null}
...
);
理想情况下,我想要一种方法来检查可选道具一次并包含额外的元素而无需任何代码重复。
【问题讨论】:
标签: javascript html css reactjs jsx