javascript - 样式化组件 - 比 ${props => props.theme...} 更容易访问传递的主题属性

标签 javascript reactjs styled-components

我有一个主题文件:

const theme = {
  colors: {
    dark: "#212121",
    normal: "#9E9E9E",
    light: "#EEEEEE"
  },
  typography: {
    textSize: "14px",
    subtitleSize: "28px",
    titleSize: "56px"
  }
};

export default theme;

我将它们传递到我的应用程序组件中:

class App extends Component {
  render() {
    return (
      <ThemeProvider theme={theme}>
        <Provider {...this.props.stores}>
          <Router>
            <AppStyles className="app-container">
              <Header />
              <Main />
            </AppStyles>
          </Router>
        </Provider>
      </ThemeProvider>
    );
  }
}

然后像这样访问嵌套组件:

const HeaderStyles = s.div`
  .link-icon {
    font-size: ${props => props.theme.typography.subtitleSize};
  }
  .header-link > a {
    font-size: ${props => props.theme.typography.textSize};
    color: ${props => props.theme.colors.normal};
    text-decoration: none;
  }
  .header-link .active-link {
    color: ${props => props.theme.colors.dark};
  }
`;

有没有比每次访问主题 Prop 时都执行 ${props => props.theme.typography.textSize} 更短的方法?

最佳答案

使用 JS 对象表示样式通常是为了保持样式模块化和范围化——这允许您将对象导入到特定组件中,然后使用 dom 元素上的“style”属性传递对象。您的用例似乎违背了这个目的。如果您想使用定义为 JS 对象的样式,我建议避免上面代码块中的间接。或者,考虑使用 CSS 模块或直接 CSS。祝你好运!

关于javascript - 样式化组件 - 比 ${props => props.theme...} 更容易访问传递的主题属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47248495/

相关文章:

javascript - 什么是 JavaScript 数组突变?

javascript - 链接查询树,不包含 "Rendered more hooks than during the previous render"

typescript - 如何用 Styled Components 和 TypeScript 包装 Ant Design?

javascript - React.js 子组件不更新从 props 派生的样式,为什么? (样式组件)

javascript - 从 .js 文件中单独的 .js 文件中定义的访问函数

javascript - 当按 Tab 键过去最后一个单元格时,自动在 ng-grid 中添加行

reactjs - React Context 和 Hooks API 的 enzyme 错误

javascript - 如何在 react 中将数据文件加载到状态数组?

javascript - 使用 flexbox 垂直对齐内容

javascript - 使用 json 调用 ArcGIS 服务的 AJAX 无法正常工作