javascript - 如何根据内容调整容器的大小而不重复相同的代码行?
问题描述
我几乎没有基于某些条件渲染的组件,因此父容器的大小必须更改。
export const Container = styled.div`
display: grid;
font-family: Nunito Sans;
padding: 32px 40px 80px 80px;
background-color: transparent;
grid-template-columns: 980px;
grid-template-rows: 40px minmax(64px, max-content);
${props =>
props.extra &&
css`
grid-template-rows: 40px min-content minmax(64px, max-content);
`};
grid-row-gap: 16px;
`;
我正在添加道具extra
,以便容器的大小根据组件的添加而变化。
renderData = () => {
const attachments = [a, b, c, d, e];
if ( attachments.length > 0 ) {
return (
<Container extra>
<DetailsHeader />
<DetailsAttachments attachments={attachments} />
<DetailsMisc />
</Container>
)
}
return (
<Container>
<DetailsHeader />
<DetailsMisc />
</Container>
)
};
所以在上面的代码中,大部分代码行都是重复的。
基本上,如果附件数组中有项目,则仅显示组件DetailsAttachments
,否则显示带有 2 个组件的普通容器。
解决方案
您只需要定义一个布尔变量来设置是否有附件的标志,然后使用它来设置extra
道具并渲染或不渲染DetailsAttachments
组件,如下所示:
renderData = () => {
const attachments = [a, b, c, d, e];
// Define a flag to easy check if attachments has elements
const extra = attachments.length > 0;
return (
<Container extra={extra}>
<DetailsHeader/>
{extra && <DetailsAttachments attachments={attachments} />}
<DetailsMisc />
</Container>
);
};
推荐阅读
- silverlight - 具有 RIA 服务的 Silverlight 项目中的 DomainOperationException
- php - 解压 array_value() 的 $_POST 数组
- ios - 如何在 iOS 应用中显示语言版本
- c# - 统一颜色不会分配给球或它应该画什么
- python - 熊猫从最大和创建变量
- curl - awk 以新行获取所有请求标头
- python-3.x - 沿一个维度操作,而不在 Xarray 上的 dask 数组中写回数据
- c# - 如何在c#中通过pem解密字符串openssl
- kubernetes - Secret 结束的原因是什么:Pod 日志中的资源版本输出太旧?
- c# - Entity Framework .Update() 和更新被跟踪实体的字段之间的功能区别是什么?