React native 反应本地全局样式
我是React新手,我了解基于组件的内联样式的好处。但我想知道是否有一个体面的方式,有某种全球性的风格。例如,我希望在整个应用程序中使用相同的文本和按钮颜色 我最初的想法是在它自己的文件中创建一个“基本”样式表类,并将其导入到我的组件中,而不是在每个组件中重复(如果需要的话,随后必须在x处对其进行更改)React native 反应本地全局样式,react-native,React Native,我是React新手,我了解基于组件的内联样式的好处。但我想知道是否有一个体面的方式,有某种全球性的风格。例如,我希望在整个应用程序中使用相同的文本和按钮颜色 我最初的想法是在它自己的文件中创建一个“基本”样式表类,并将其导入到我的组件中,而不是在每个组件中重复(如果需要的话,随后必须在x处对其进行更改) 有更好或更多的“反应”方式吗?您可以创建一个可重用的样式表。例如: style.js 'use strict'; import { StyleSheet } from 'react-native
有更好或更多的“反应”方式吗?您可以创建一个可重用的样式表。例如: style.js
'use strict';
import { StyleSheet } from 'react-native';
module.exports = StyleSheet.create({
alwaysred: {
backgroundColor: 'red',
height: 100,
width: 100,
},
});
export default AppStyles = {
colour: {
background: '#f4f9fd',
font: '#434e5a',
primary: '#ff3b30'
}
}
import AppStyles from './AppStyles';
const styles = StyleSheet.create({
container: {
backgroundColor: AppStyles.colour.background
}
});
在您的组件中:
const s=require('./style');
…然后:
<View style={s.alwaysred} ></View>
您也可以尝试支持全局样式变量:
// app.js
EStyleSheet.build({
buttonColor: 'green'
});
// component.js
var styles = EStyleSheet.create({
button: {
backgroundColor: '$buttonColor',
...
}
});
试试我的库,它不仅为您提供全局样式,而且还提供了一个设计优先、响应迅速的布局系统,其宽度和高度与根fontsize相对。为您的样式创建一个文件(即
Style.js
)
以下是一个例子:
import { StyleSheet } from 'react-native';
export default StyleSheet.create({
container: {
flex: 1
},
welcome: {
fontSize: 20
}
});
在要使用样式的任何文件中,添加以下内容:
import styles from './Style'
如果你只是想设置一些全局变量,你可以试试 AppStyles.js
'use strict';
import { StyleSheet } from 'react-native';
module.exports = StyleSheet.create({
alwaysred: {
backgroundColor: 'red',
height: 100,
width: 100,
},
});
export default AppStyles = {
colour: {
background: '#f4f9fd',
font: '#434e5a',
primary: '#ff3b30'
}
}
import AppStyles from './AppStyles';
const styles = StyleSheet.create({
container: {
backgroundColor: AppStyles.colour.background
}
});
index.ios.js
'use strict';
import { StyleSheet } from 'react-native';
module.exports = StyleSheet.create({
alwaysred: {
backgroundColor: 'red',
height: 100,
width: 100,
},
});
export default AppStyles = {
colour: {
background: '#f4f9fd',
font: '#434e5a',
primary: '#ff3b30'
}
}
import AppStyles from './AppStyles';
const styles = StyleSheet.create({
container: {
backgroundColor: AppStyles.colour.background
}
});
请看React Native
以下是Shoutem主题的内容:
全局样式,其中某些样式通过其样式名称自动应用于组件:
const theme = {
'my.app.ComponentStyleName': {
backgroundColor: 'navy',
},
};
使用styleName
激活特定于组件的样式(如CSS类):
您可以在文档中看到示例
最后一件事,我们还提供了一组组件,这些组件已经连接到样式,因此您可以将它们导入全局样式/主题中。您必须创建一个文件来存储其中的所有样式,如“style.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>
);
}
}
import React,{Component}来自'React';
从“react native”导入{View,Button};
从“./config/styles”导入样式表;
导出默认类应用程序扩展组件{
render(){
返回(
);
}
}
外部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>
var mainCss=require('./main');
你好
所有这些方法都直接回答了这个问题,但就我而言,在基于组件的设计系统(如React)中,这不是实现这一点的方法
我们可以从原子组件开始,然后分层并分组,一直到顶部。下面的文章可能会使这一思路更加清晰:
在自然界中,原子元素结合在一起形成
分子。这些分子可以进一步结合形成相对分子
复杂生物
如果您需要一个不存在的基础组件,您可以创建它。然后你可以用它制作其他不太具体的组件。例如:
//当
//默认样式是未更改的引用
//而不是每次都有一个新对象。
常量样式={
颜色:“午夜蓝”,
尺寸:14,
}
函数getStyle(styleProp){
//styleProp能够覆盖样式
if(styleProp)返回{…style,…styleProp}
else返回样式
}
导出默认函数CustomText(道具){
返回(
{props.children}
)
}
然后在任何地方使用
CustomText
,而不是Text
。您还可以使用View
、div
、span
或其他任何工具进行排序。在这里,您可以找到一种优雅的方式对样式进行排序,然后导入到不同的组件中,您可以创建一个文件夹,在其中收集所有样式文件并创建和索引.js,它将作为facade:
index.js如下所示:
import Variables from './variables';
import GlobalStyles from './global';
export { Variables, GlobalStyles };
然后像这样导入:
import { GlobalStyles } from './stylesheets/index';
详情请参阅:
我用类似的方法工作 创建一个名为“constants”的目录 在./constants/AppStyles.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
}
});
然后在App.js中引用此文件和创建的样式
import React from 'react';
import {
View,
Text
} from 'react-native';
import AppStyles from './constants/AppStyles';
const App = () => {
return (
<View style={ AppStyles.container }>
<Text>MOST BASIC Template EVER!</Text>
</View>
);
};
export default App;
从“React”导入React;
进口{
看法
正文
}从“反应本机”;
从“./constants/AppStyles”导入AppStyles;
常量应用=()=>{
返回(
最基本的模板!
);
};
导出默认应用程序;
我掉进了陷阱
- 我在从“./constants/AppStyles”导入的{AppStyles}周围有花括号;错:-(
- 我将AppStyles创建为一个组件,并尝试导出一个常量错误:-)
在网上找到了一门好课程,并从中找到了答案是的,这就是我所描述的。谢谢你确认我的想法是正确的。现在将标记为正确答案。现在您可以从“react native”使用
import{StyleSheet}代码>我添加了一个答案,解释了一种获得全球风格的不同方式,您可能想看看。它更灵活,更符合React精神,因为它避免了静态定义。我不同意,这不是枯燥的,也不是React生态系统中推荐的基于组件的设计(或架构)。具有默认样式的每个组件都需要添加style={defaultStyle}
。相反,您可以创建一个DefaultView
并使用该视图,而不是提供的按照您的规范设置样式的视图。不久前,我写了一个详细说明这种方法的答案:像魅力一样工作;)这很有趣!乍一看,它看起来怪怪的,但是当我想到它的时候,考虑到我要写的代码越少越好,我觉得它很适合你。您将学会特别欣赏间距比例。如果您需要支持,请随时联系。@Niclas如果您能在NPM:上启用我的软件包,我会很高兴的,原因是我的在线软件包也有一个不推荐的版本,因为它的启用,目前排名更高。嗨,Fabian,有可能自动启用默认样式吗