计算样式组件中的附加道具

Calculating additional props in styled component

我有一个样式相当简单的组件,但我想使用道具来计算一些额外的道具,以便稍后在插值中使用。我意识到我可以在表达式中进行计算,但这意味着要重复多次。这是我的代码。

const StyledColumns = styled.div.attrs({
    columnWidths: props => calculateColumnWidths(props)
})`

    display: grid;
    grid-column-gap: 40px;
    grid-row-gap: 20px;

    grid-template-columns: ${props => props.columnWidths[0]}

    // Use props.columnWidths a few more times...

`

这里有两个问题 - (A) 我收到一条错误消息,指出属性名称中不能使用大写字符,并且 (B) 这让我意识到属性实际上是添加在 DOM 到 div。我认为这只是一种计算额外道具的便捷方法。

有没有更好的方法,所以我只需要 运行 计算一次,但渲染中什么也没有出现 DOM?

我建议将您的样式化组件包装在 HOC 中,以便在那里进行计算。

const StylisedColumn = React.memo(props => {
  const columnWidths = calculateColumnWidths(props);
  const Column = styled.div`
    display: grid;
    grid-column-gap: 40px;
    grid-row-gap: 20px;
    grid-template-columns: ${columnWidths[0]}

    // Use columnWidths a few more times...
  `;

  return <Column {...props} />;
});

使用React.memo避免重新渲染,就像纯组件一样:)