在样式组件中使用扩展运算符

Using the spread operator in styled components

是否可以在 React Native 中使用带样式组件的展开运算符?

我有这个组件:

const StyledHeaderText = styled.Text`
fontFamily: ${props => props.theme.font};
fontSize: ${props => props.theme.fontSizeSubtitle};
color: ${props => (props.lightMode) ? props.theme.fontColor : props.theme.fontPrimaryColor}
`;

但是可以说,在我的主题中,我有一个同时具有 fontFamily 和 fontSize 的对象,并且我在整个应用程序中都在使用它。我想知道我是否可以做这样的事情,目前它不起作用:

const StyledHeaderText = styled.Text`
...${props => props.theme.fontHeader};
color: ${props => (props.lightMode) ? props.theme.fontColor : props.theme.fontPrimaryColor}
`;

例如,在 iOS 中设置高度也很有用,因为我必须设置 4 种样式。

谢谢

您可以使用 css helper function 生成特定的 css 和 return 它作为模板文字。

import styled, {css} from 'styled-components/native'

const GlobalStyles = css`
 fontFamily: ${props => props.theme.font};
 fontSize: ${props => props.theme.fontSizeSubtitle};
`

const StyledHeaderText = styled.Text`
 ${GlobalStyles}
 // Other Styles
`

或有条件地作为

const StyledHeaderText = styled.Text`
 ${props => props.theme.fontHeader ? GlobalStyles : 'fontSize: 14'}
 // Other Styles
`

您还可以 return 直接从插值函数中获取对象,它们将被视为内联样式。

const StyledHeaderText = styled.Text`
      ${props => ({...props.theme.fontHeader})};
      color: ${props => (props.lightMode) ? props.theme.fontColor props.theme.fontPrimaryColor}
`;

const StyledHeaderText = styled.Text`
          ${props => props.theme.fontHeader};
          color: ${props => (props.lightMode) ? props.theme.fontColor props.theme.fontPrimaryColor}
    `;

更多详情:reference

要扩展以前的答案,您还可以执行以下操作:

import styled, {css} from 'styled-components/native'

// with theme
const GlobalStyles = css`
 fontFamily: ${ ({theme}) => theme.font };
 fontSize: ${ ({theme}) => theme.fontSizeSubtitle };
`

// Without theme using inherited props
const GlobalStyles = css`
 fontFamily: ${ ({font}) => font };
 fontSize: ${ ({fontSizeSubtitle}) => fontSizeSubtitle };
`

// if you wanted it to be conditional
const GlobalStyles = css`
 fontFamily: ${ ({font}) => font || 'roboto' };
 fontSize: ${ ({fontSizeSubtitle}) => fontSizeSubtitle || '14px' };
`

const StyledHeaderText = styled.Text`
 ${GlobalStyles}
 // Other Styles
`

// same can also be done with regular styled components:
export const HeaderText = styled.p`
 fontSize: ${ ({fontSizeSubtitle}) => fontSizeSubtitle || '14px' };
`
// Useage would be in your component would be like:

import react from react;
import { HeaderText } from '../component/styles'

export const FooComponent = memo(({ destructuredProps }) => {


// some other code

return (

<>
<HeaderText className={fooClass} fontSize='18px'> Here's my sample text! </HeaderText>
<>

)});




在React.js中你可以使用展开运算符覆盖多个样式

这里有一个link转码example

const StyledText = styled.div`
    /* Normal styles */
    color: blue,
    background-color: white,

    /* Fields to override with object from props */
    ${({ styleOverrides }) => ({ ...styleOverrides })}
`;