我是一名老程序员,正在学习使用react-native。
我遇到了问题,似乎无法有效地利用组件的条件渲染。我的目标是有条件地加载此按钮。
这是一个奇怪的问题,我已经花了整整一天的时间来解决它。我在应用程序的一个场景中使用了renderIf技术,它完美地工作了。但是,当我在这个组件中使用它时,它立即崩溃,抛出了一个NSException异常。
我使用终端命令npm install render-if --save安装了该软件包,对于场景来说效果非常好,但对于这个组件来说却没有用。
任何帮助都将不胜感激,如果有其他方法的建议也将不胜感激。
GeneralButton.js
'use strict';
import React, { Component } from 'react';
import {
StyleSheet,
TouchableHighlight,
View,
Text,
Dimensions,
Platform,
} from 'react-native';
import renderIf from 'render-if';
class GeneralButton extends Component {
constructor(props) {
super(props);
this.state = {
render: true
}
}
getWidth(){
let width, percent;
if (this.props.percent == true) {
let screenWidth = Dimensions.get('window').width;
width = (screenWidth / 100) * this.props.width;
return width;
} else {
percent = false;
width = this.props.width != null ? this.props.width : 300;
return width;
}
}
render() {
return (
{renderIf(this.state.render)(
<TouchableHighlight underlayColor='rgba(255, 255, 255, 0.2)' onPress={this.props.onPress}>
<View style={styles.button} width={this.getWidth()}>
<Text style={styles.buttonText}>
{this.props.text}
</Text>
</View>
</TouchableHighlight>
)}
);
}
}
const styles = StyleSheet.create({
button: {
height: 44,
borderColor: 'rgba(255, 255, 255, 0.8)',
borderWidth: StyleSheet.hairlineWidth,
paddingTop: 5,
paddingBottom: 5,
paddingLeft: 10,
paddingRight: 10,
alignItems: 'center',
justifyContent: 'center',
},
buttonText: {
color: 'white',
...Platform.select({
ios: {
fontFamily: 'OpenSans-Light',
},
android: {
fontFamily: 'opensanslight',
},
})
},
});
module.exports = GeneralButton;