Search code examples
javascriptreact-nativestyled-components

Using the spread operator in styled components


Is it possible to use the spread operator with a styled component in React Native?

I have this component:

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

But lets say that in my theme, I have an object that has both the fontFamily and the fontSize, and I re use all over the app. I would like to be able to know if I can do something like this, which currently it is not working:

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

This would be useful too setting up elevation in iOS for example, since I have to setup 4 styles.

Thanks


Solution

  • You can use the css helper function to generate the specific css and return it as a template literal.

    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
    `
    

    or conditionally as

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