我有一个像这样的样式组件:
export const Text = styled.div`
padding: ${props => props.theme.padding * 2};
`;
很遗憾,这不起作用,因为在我的情况下,
props.theme.padding
是2rem(字符串),因此无法与数字相乘。从我的研究中,我看到了一些关于github页面的对话,人们要求找到一种方法来解决此问题,但我无法找到任何实际的干净解决方案。我将需要经常编写此类代码。有可能吗?
我有一个像这样的样式组件:
export const Text = styled.div`
padding: ${props => props.theme.padding * 2};
`;
props.theme.padding
是2rem(字符串),因此无法与数字相乘。我通过使用calc()
来避免这个问题。
export const Text = styled.div`
padding: calc(${props => props.theme.padding} * 2);
`;
export const Text = styled.div`
padding: ${props => parseFloat(props.theme.padding) * 2}rem; // padding is a float here
`;
或者你可以提取数字,但由于性能影响,我不太建议这样做。
const valueFromUnit = x => parseFloat(x.match(/\d+/g));
export const Text = styled.div`
padding: ${props => valueFromUnit(props.theme.padding) * 2}rem;
`;
// utils.js
export const unitMultiplier = (value) => (quotient) => {
const num = parseFloat(value);
const unit = value.replace(num.toString(), "");
return num * quotient + unit;
};
你可以像这样将它包含在你的项目中:
import { unitMultiplier } from "~/utils";
export const Text = styled.div`
padding: ${props => unitMultiplier(props.theme.padding)(2)};
`;
更新: 我发现有一个库非常擅长这种事情:https://polished.js.org/docs/#math