Can I make dynamic styles in React Native? Can I make dynamic styles in React Native? reactjs reactjs

Can I make dynamic styles in React Native?


I usually do something along the lines of:

<View style={this.jewelStyle()} />

...

jewelStyle = function(options) {   return {     borderRadius: 12,     background: randomColor(),   } }

Every time View is rendered, a new style object will be instantiated with a random color associated with it. Of course, this means that the colors will change every time the component is re-rendered, which is perhaps not what you want. Instead, you could do something like this:

var myColor = randomColor()<View style={jewelStyle(myColor)} />

...

jewelStyle = function(myColor) {   return {     borderRadius: 10,     background: myColor,   } }


Yes you can and actually, you should use StyleSheet.create to create your styles.

import React, { Component } from 'react';import {    StyleSheet,    Text,    View} from 'react-native';    class Header extends Component {    constructor(props){        super(props);    }        render() {        const { title, style } = this.props;        const { header, text } = defaultStyle;        const combineStyles = StyleSheet.flatten([header, style]);            return (            <View style={ combineStyles }>                <Text style={ text }>                    { title }                </Text>            </View>        );    }}    const defaultStyle = StyleSheet.create({    header: {        justifyContent: 'center',        alignItems: 'center',        backgroundColor: '#fff',        height: 60,        paddingTop: 15,        shadowColor: '#000',        shadowOffset: { width: 0, height: 3 },        shadowOpacity: 0.4,        elevation: 2,        position: 'relative'    },    text: {        color: '#0d4220',        fontSize: 16    }});    export default Header;

And then:

<Header title="HOME" style={ {backgroundColor: '#10f1f0'} } />


If you still want to take advantage of StyleSheet.create and also have dynamic styles, try this out:

const Circle = ({initial}) => {const initial = user.pending ? user.email[0] : user.firstName[0];    const colorStyles = {        backgroundColor: randomColor()    };    return (        <View style={[styles.circle, colorStyles]}>            <Text style={styles.text}>{initial.toUpperCase()}</Text>        </View>    );};const styles = StyleSheet.create({    circle: {        height: 40,        width: 40,        borderRadius: 30,        overflow: 'hidden'    },    text: {        fontSize: 12,        lineHeight: 40,        color: '#fff',        textAlign: 'center'    }});

Notice how the style property of the View is set as an array that combines your stylesheet with your dynamic styles.