【问题标题】:Load files globally in react native在本机反应中全局加载文件
【发布时间】:2018-05-15 08:05:39
【问题描述】:

我是原生反应的新手。我想知道是否可以将 CSS、Colors 全局加载到所有组件和屏幕,而不是在每个屏幕中导入。

我有一个可重用的 stylesheet.js 和 colors.js,其中包含所有全局 css 和颜色。 stylesheet.js

'use strict';

import {StyleSheet} from 'react-native';
import colors from './colors';


module.exports = StyleSheet.create({

    container:{
        flex:1,
    },

    alwaysred: {
       color:colors.txt_main,
    },

});

但现在要在组件中使用,我需要在每个组件中导入。 所以我想知道是否有更简单的方法可以将样式表和颜色导入所有屏幕/组件。

我尝试在 index.js 中导入,但是当我尝试访问样式属性时,它说样式未定义 像这样的

Index.js

import { AppRegistry } from 'react-native';
import stylesheet from './app/resources/styles/stylesheet';

import App from './app/App';

AppRegistry.registerComponent('newApp', () => App);

App.js

 <Text style={stylesheet.alwaysred}>
     New stylesheet imported globally
  </Text>

这给出了未定义样式表的错误。 我已经关注这个 Stackoverflow 线程 link 来创建全局样式表

【问题讨论】:

  • > 它说 style undefined 那是因为你使用不同的模块实现。您以node.js 样式导出,但从标准实现导入它。因此,只需使用 export default 而不是 module.exports 导出样式

标签: javascript css reactjs react-native


【解决方案1】:

使用global:

global.stylesheet = StyleSheet.create({

    container:{
        flex:1,
    },

    alwaysred: {
       color:colors.txt_main,
    },

});

【讨论】:

  • 嘿!这行得通,但这确实不是最佳实践。通过在 global 上定义变量,其他开发人员和工具(如类型检查器、捆绑程序等)更难使用您的代码。如果您必须具有“全局”样式,通常最好明确定义“theme.js”(或类似文件)以将其导入您想要使用的位置。
  • @jevakallio 同意,任何全局语句都非常易于使用。例如,我更喜欢使用模块和“急速”模块系统。但是主题发起者想要获得全球访问权限,我只是帮忙)
  • 酷。只是想在此处记录评论,以防有人稍后过来并看到解决方案:)
  • @jevakallio 是的,我有一个单独的文件名 stylesheet.js,我正在全局加载它,而不是在每个屏幕中导入。基里尔的答案是我一直在寻找的。谢谢你基里尔:))
  • @user7747472 酷!很高兴您找到了解决问题的方法。这不是你真正应该做的事,但是,嘿,规则是制定的,要点无关紧要:)
【解决方案2】:

实现此目的的规范 React 方法是创建您自己的样式化组件。例如,如果您希望应用程序中的所有 Text 元素都是红色的,您可以为其定义自己的组件:

// Text.js
import { Text, StyleSheet } from 'react-native';

const StyledText = ({ style, ...props }) => (
  <Text style={[styles.text, style]} {...props}></Text>
)

const styles = StyleSheet.create({
  text: {
    color: 'red'
  }
});

export default StyledText;

然后您可以在通常使用来自 react-native 的 Text 的地方使用该文本组件:

import Text from 'Text';

这有点冗长,所以人们经常使用 glamorous-nativestyled-components 之类的库来达到相同的效果。

// glamorous
const MyStyledText = glamorous.text({
  color: 'red'
});

// styled-components
const MyStyledText = styled.Text`
  color: red;
`;

【讨论】:

  • 是的,我有单独的样式表 js,但我不喜欢在每个屏幕中导入导入的想法。假设我有 10 个屏幕,我需要在每个 10 个屏幕中加载 text.js,但我想让它成为全局的,以便所有屏幕都可以访问它的所有变量。 Kilrlin ans 是我正在寻找的那个。我也喜欢这种方法。我也会用它
猜你喜欢
  • 1970-01-01
  • 2021-06-10
  • 2021-01-23
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2022-08-13
  • 1970-01-01
相关资源
最近更新 更多