Подтвердить что ты не робот

Реагировать Нативные глобальные стили

Я новичок в React, и я понимаю преимущества встроенных стилей на основе компонентов. Но мне интересно, есть ли достойный способ иметь какой-то глобальный стиль. Например, я хотел бы использовать ту же самую текстовую и кнопочную раскраску в моем приложении.

Вместо того, чтобы повторять в каждом компоненте (и, впоследствии, необходимо изменить его в x местах, если это необходимо), моя первоначальная мысль состоит в том, чтобы создать "базовый" класс StyleSheet в его собственном файле и импортировать его в мои компоненты.

Есть ли лучший или более "Реагирующий" способ?

4b9b3361

Ответ 1

Вы можете создать многостраничную таблицу стилей. Пример:

style.js

'use strict';

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

var {
  StyleSheet,
} = React;

module.exports = StyleSheet.create({

alwaysred: {
    backgroundColor: 'red',
    height: 100,
    width: 100,
},

});

В вашем компоненте:

var s = require('./style');

...затем:

<View style={s.alwaysred} ></View>

Ответ 2

Создайте файл для ваших стилей (IE, Style.js).

Вот пример:

import { StyleSheet } from 'react-native';

export default StyleSheet.create({
  container: {
    flex: 1
  },
  welcome: {
    fontSize: 20
  }
});

В любом из файлов, которые вы хотите использовать в своем стиле, добавьте следующее:

import styles from './Style'

Ответ 3

Если вы просто хотите установить некоторые глобальные переменные, вы можете попробовать.

AppStyles.js

export default AppStyles = {
    colour: {
        background: '#f4f9fd',
        font: '#434e5a',
        primary: '#ff3b30'
    }
}

index.ios.js

import AppStyles from './AppStyles';

const styles = StyleSheet.create({
    container: {
        backgroundColor: AppStyles.colour.background
    }
});

Ответ 4

Вы также можете попробовать react-native-extended-stylesheet, который поддерживает глобальные переменные стиля:

// app.js
EStyleSheet.build({
   buttonColor: 'green'
});

// component.js
var styles = EStyleSheet.create({
  button: {
    backgroundColor: '$buttonColor',
    ...
  }
});

Ответ 5

Вы должны создать файл для хранения всего стиля в нем, как " styles.js ", и написать код типа css, как вам нужно

'use strict';
import {StyleSheet} from 'react-native';

export default StyleSheet.create({

    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },

    title: {
        fontSize: 10,
        color: '#000',
        backgroundColor: '#fff'
    },

    button: {
        fontSize: 12,
        color: '#000',
        backgroundColor: '#fff'
    }

});

и теперь вы можете использовать глобальный стиль, как вы можете видеть

import React, { Component } from 'react';
import { View, Button } from 'react-native';
import StyleSheet from './config/styles';

export default class App extends Component {

  render() {
    return (
      <View
        style={StyleSheet.container}>
        <Button
          style={StyleSheet.button}
          title="Go to Lucy profile"
        />
      </View>
    );
  }
}

Ответ 6

Попробуйте мою библиотеку react-native-style-tachyons, которая не только дает вам глобальные стили, но и систему с первоклассным, отзывчивым макетированием с шириной и высотой относительно вашего корневого шрифта.

Ответ 7

Внешний файл CSS main.css

'use strict';

var {
   StyleSheet,
 } = 'react-native';

module.exports = StyleSheet.create({

  main: {
     backgroundColor: 'gray',
     height: 20,
     width: 100,
  }
});

создать экземпляр css файла в компоненте.

var mainCss = require('./main');

<View style={mainCss.main}><Text>Hello</Text></View>

Ответ 8

Все эти методы напрямую отвечают на вопрос, но это не способ сделать это. Эти люди застряли в старом образе мышления, где вы создаете доступные элементы. В React вы делаете компоненты. Поэтому, если вам нужен базовый компонент, которого нет, вы делаете его. например:

function getStyle (styleProp) {
  return {
    color   : getTheme().text,
    fontSize: 14,
    ...styleProp
  }
}

export default function CustomText (props) {
  return (
    <Text style={getStyle(props.style)}>
      {props.children}
    </Text>
  )
}

а затем используйте CustomText везде, а не Text. Вы также можете сделать это с помощью View, div, span или всего остального.

Ответ 9

Взгляните на Shoutem Themes для React Native.

Вот что вы получаете с Shoutem Theme:

Глобальный стиль, когда определенный стиль автоматически применяется к компоненту по имени стиля:

const theme = {
  'my.app.ComponentStyleName': {
    backgroundColor: 'navy',
  },
};

Активация определенного стиля компонента с помощью styleName (например, класса CSS):

const theme = {
  'my.app.ComponentStyleName': {
    '.rounded': {
      borderRadius: 20,
    },
    backgroundColor: 'navy',
  },
};

// Implementation - will apply borderRadius to Component
<Component styleName="rounded"/>

Автоматическое наследование типов:

const theme = {
  'my.app.ComponentStyleName': {
    'my.app.ChildComponentStyleName': {
      backgroundColor: 'red',
    },
    '.rounded': {
      borderRadius: 20,
    },
    backgroundColor: 'navy',
  },
};

// Implementation - will apply red background color to ChildComponent
<Component styleName="rounded">
  <ChildComponent/>
</Component>

Вложенный стиль для составных компонентов:

const theme = {
  'my.app.ComponentStyleName': {
    containerView: {
      paddingTop: 10,
    },
    innerView: {
      backgroundColor: 'yellow',
    },
  },
};

// Of course do not forget to connect Component
function Component({ style }) {
  return (
   <View style={style.containerView}>
    <View style={style.innerView}>
     <Text>Warning with yellow background.</Text>
    </View>
   </View>
  );
}

Чтобы получить его работу, вам нужно использовать StyleProvider, компонент оболочки, который предоставляет стиль всем другим компонентам через контекст. Аналогично Redux StoreProvider.

Также вам нужно подключить ваш компонент к стилю с помощью connectStyle, чтобы вы всегда использовали подключенный компонент. Аналогично Redux connect.

export const styledComponent = connectStyle('my.app.ComponentStyleName',
                                { ...defaultStyleIfAny })(Component);

Вы можете увидеть пример в документации.

Наконец, мы также предоставили набор компонентов в нашем UI ToolKit, которые уже подключены к стилю, поэтому вы можете просто импортировать их и стиль в вашем глобальном стиле/теме.