使用样式组件,如何在样式组件之外设置颜色数组?

时间:2018-06-23 15:02:28

标签: javascript css reactjs styled-components

theme.js -我有一个Styled-Components主题,其中包含我应用程序的所有颜色。

const colors = {
  purples: {
    60: '#AEA',
    50: '#GSA',
  },

  blues: {
    20: '#asd',
    5: '#fasd',
  }
  ...

然后有一个UI组件,需要在其中按特定顺序定义颜色数组:

import React from 'react';
const colors = ['#GSA', '#AEA', '#asd', '#fasd', '#AEA'];

稍后,我根据状态使用此colors数组查找要在我的组件中使用的正确颜色:

const getBackgroundColor = ({ currentPosition }) => {
  const color = colors[(currentPosition) % colors.length];
  return color;
};

此功能在我的样式化组件中使用,如下所示:

const StyledCard = styled.div`
  background: ${getBackgroundColor};
  ...
`;

问题是我的颜色数组没有设置样式组件主题。

当主题位于样式元素之外时,如何使用主题const colors定义

2 个答案:

答案 0 :(得分:2)

所以我已经在本机操作中做到了,应该非常相似。我有一个名为colors.js的文件,其中包含所有颜色,然后将它们作为对象导入,这样我可以说colors[TheNameOfTheColorIWant]

colors.js

export const fadedPurple = '#9f91ad';
export const success = '#4fa579';
export const failure = '#ca374d';

按钮组件

import * as colors from '../../../assets/styles/colors';

const Button = (props) => {
  const {
    onPress,
    children,
    color
  } = props;

  style = {
    backgroundColor: colors[backgroundColor]
  }

  return (
    <TouchableOpacity style={ style }
                      onPress={ onPress }
                      disabled={ disabled }>
        { children }
    </TouchableOpacity>
  )

答案 1 :(得分:1)

使用以下模式创建js文件:

'use strict';

var React = require('react-native');

var myStyle = React.StyleSheet.create({
   red: {backgroundColor: 'red' },
   blue: {backgroundColor: 'blue' }
)}
module.exports = myStyle;

您的组件js使用require才能使用该样式表

var customStyle = require('../the/path/to/commonStyleSheet');

现在像这样使用:

<View style = {customStyle .red} />
<View style = {customStyle .blue} />