我是React的新手,我了解基于组件的内联样式的好处。但我想知道是否有一种体面的方式来拥有某种全球风格。例如,我想在整个应用中使用相同的文字和按钮颜色。
不是在每个组件中重复(并且如果需要,随后必须在x个位置进行更改),我最初的想法是创建一个基础' StyleSheet类在它自己的文件中,并将其导入我的组件。
是否有更好或更多的反应'方式是什么?
答案 0 :(得分:105)
您可以创建可重复使用的样式表。例如:
<强> 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>
答案 1 :(得分:66)
为您的样式创建一个文件(I.E.,Style.js
)。
以下是一个例子:
import { StyleSheet } from 'react-native';
export default StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20
}
});
在您要使用样式的任何文件中,添加以下内容:
import styles from './Style'
答案 2 :(得分:9)
如果您只想设置一些全局变量,可以试试。
<强> 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
}
});
答案 3 :(得分:8)
您也可以尝试支持全局样式变量的react-native-extended-stylesheet:
// app.js
EStyleSheet.build({
buttonColor: 'green'
});
// component.js
var styles = EStyleSheet.create({
button: {
backgroundColor: '$buttonColor',
...
}
});
答案 4 :(得分:8)
您必须创建一个文件来存储其中的所有样式,如“ 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's profile"
/>
</View>
);
}
}
答案 5 :(得分:3)
试试我的库react-native-style-tachyons,它不仅为您提供全局样式,还提供了一个设计优先的响应式布局系统,其宽度和高度相对于您的根字体大小。
答案 6 :(得分:1)
外部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>
答案 7 :(得分:1)
所有这些方法都直接回答了问题,但这不是解决问题的方法。这些人陷入了旧的思维方式,即在何处设置可用元素的样式。在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
或其他任何方法来实现。
答案 8 :(得分:0)
在这里,您可以找到一种优雅的方式来对样式进行排序,然后将其导入到不同的组件中,可以创建一个文件夹,在其中收集所有样式文件,并创建和index.js,它将作为外观使用: / p>
index.js将如下所示:
import Variables from './variables';
import GlobalStyles from './global';
export { Variables, GlobalStyles };
然后像这样导入:
import { GlobalStyles } from './stylesheets/index';
此处提供更多信息:
https://thoughtbot.com/blog/structure-for-styling-in-react-native
答案 9 :(得分:0)
我使用类似的软件
创建一个名为“ constants”的目录 在./constants/AppStyles.js
中创建文件karate-base.js
然后在App.js中引用此文件和创建的样式。
/**
* Project level stylesheet for common styles
*/
import { StyleSheet } from 'react-native';
export default StyleSheet.create({
container: {
flex: 1,
margin: 20,
alignItems: 'center',
alignContent: 'center',
paddingVertical: 60
}
});
我掉进去的陷阱
在网上找到了一门不错的课程,并从那里弄清楚了
答案 10 :(得分:-2)
查看Shoutem Themes的React Native。
以下是Shoutem主题的内容:
某种样式通过其样式名称自动应用于组件的全局样式:
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中提供了一组已连接到样式的组件,因此您只需在全局样式/主题中导入它们并设置样式。