You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将styled-components的props值提取到JavaScript变量中?

嘿,我来帮你搞定这个问题!你现在的问题在于,你把一个箭头函数赋值给了Columns变量,而不是直接获取到props里的实际数值——毕竟在styled.div的定义之外,我们根本拿不到组件渲染时才会传入的props呀😉

我给你两种正确的写法,你可以按需选择:

方法1:直接在模板字符串的插值里处理逻辑

把生成列格式的逻辑放进grid-template-columns的插值函数里,这样就能直接访问到组件接收的props了:

const CardBox = styled.div`
  display: grid;
  grid-template-columns: ${props => {
    let columnCount = '';
    // 这里直接用props.Columns拿到传入的数值
    for (let i = 0; i < props.Columns; i++) {
      columnCount += "Auto ";
    }
    // 去掉最后多余的空格,避免CSS语法问题
    return columnCount.trim();
  }};
`;

方法2:抽成辅助函数(更易维护)

如果逻辑比较复杂,把它单独抽成一个函数会更清晰:

// 单独写一个生成列格式的函数
const getGridColumns = (columnNumber) => {
  let columnCount = '';
  for (let i = 0; i < columnNumber; i++) {
    columnCount += "Auto ";
  }
  return columnCount.trim();
};

// 在styled组件里调用这个函数,传入props里的数值
const CardBox = styled.div`
  display: grid;
  grid-template-columns: ${props => getGridColumns(props.Columns)};
`;

额外小技巧:简化循环逻辑

其实用JavaScript的repeat方法可以一行搞定,不用写循环:

const CardBox = styled.div`
  display: grid;
  grid-template-columns: ${props => "Auto ".repeat(props.Columns).trim()};
`;

这样当你使用<CardBox Columns="3">时,就会生成grid-template-columns: Auto Auto Auto的CSS啦!

内容的提问来源于stack exchange,提问作者Flemming Krog Olsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:17:28