在 React-Native 中设置可重用组件的样式

Styling reusable components in React-Native

我制作了一个可重复使用的组件 Button.js 并将其导入到两个不同的屏幕上。该按钮看起来一样,但在第一个屏幕上我需要它是 position: 'absolute',在第二个屏幕上我需要它是 position: 'relative'(默认值)。

如何在首屏添加绝对位置?我试图在 FirstPage.js 上添加样式,但它不起作用。如何覆盖 Button.js 中定义的样式?

Button.js:

import React from 'react';
import { Text, TouchableOpacity } from 'react-native';

const Button = ({ position, onPress, children }) => {
  const { buttonStyle, textStyle } = styles;

    return (
        <TouchableOpacity onPress={onPress} style={buttonStyle, {'position': position}}>
            <Text style={textStyle}>{children}</Text>
        </TouchableOpacity>
    );
};

Button.defaultProps = {
  position: 'relative',
}

const styles = {
  textStyle: {
    alignSelf: 'center',
    color: '#F44336',
    fontSize: 16,
  },
  buttonStyle: {
    zIndex: 2,
    width: 100,
    backgroundColor: '#FFF',
  }
};

export { Button };

你可以传递道具,像这样(Button.js)(根据发布的代码编辑):

import React from 'react';
import { Text, TouchableOpacity } from 'react-native';

const Button = ({ position, onPress, children }) => {
  const { buttonStyle, textStyle } = styles;
  const style = {...buttonStyle, position };
  return (
    <TouchableOpacity onPress={onPress} style={style}>
        <Text style={textStyle}>{children}</Text>
    </TouchableOpacity>
  );
};

Button.defaultProps = {
  position: 'relative',
}

const styles = {
  textStyle: {
    alignSelf: 'center',
    color: '#F44336',
    fontSize: 16,
  },
  buttonStyle: {
    zIndex: 2,
    width: 100,
    backgroundColor: '#FFF',
  }
};

export { Button };

你的按钮当然看起来不一样了,这只是你可以做什么的大纲(基本上只是使用道具)。

这是可重复使用的按钮,可触摸不透明度。

export const NormalThemeButton = (props) => {
    return (
        <TouchableOpacity
            style={[{ ...props.style, ...styles.normalThemeBtn }]}
            style={[{ alignItems: props.align }, styles.anchor]}
            onPress={props.onPress} >
            <CustomText text={props.text} l bold style={{
                textAlign: 'center',
                color: theme['blackColor']
            }} />
             {props.children}
        </TouchableOpacity >
    );
};

这是使用此可重复使用按钮的地方。

   style={{ ...styles.openArrivedButton }}
   text={Lng.instance.translate('useWaze')}
   onPress={() => { Waze() }}/>

希望对您有所帮助。