React native 反应本地全局样式

React native 反应本地全局样式,react-native,React Native,我是React新手,我了解基于组件的内联样式的好处。但我想知道是否有一个体面的方式,有某种全球性的风格。例如,我希望在整个应用程序中使用相同的文本和按钮颜色 我最初的想法是在它自己的文件中创建一个“基本”样式表类,并将其导入到我的组件中,而不是在每个组件中重复(如果需要的话,随后必须在x处对其进行更改) 有更好或更多的“反应”方式吗?您可以创建一个可重用的样式表。例如: style.js 'use strict'; import { StyleSheet } from 'react-native

我是React新手,我了解基于组件的内联样式的好处。但我想知道是否有一个体面的方式,有某种全球性的风格。例如,我希望在整个应用程序中使用相同的文本和按钮颜色

我最初的想法是在它自己的文件中创建一个“基本”样式表类,并将其导入到我的组件中,而不是在每个组件中重复(如果需要的话,随后必须在x处对其进行更改)


有更好或更多的“反应”方式吗?

您可以创建一个可重用的样式表。例如:

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,有可能自动启用默认样式吗