【发布时间】:2020-01-24 03:43:50
【问题描述】:
我正在尝试在本机反应中模拟焦点/模糊事件,但没有成功。我有两个组件,主页和按钮。在家里,我呈现了一个按钮列表(category1、category2 和 category3)。 这是我的代码:
---首页组件----
state = {
categories: ['category1', 'category2', 'category3']
};
renderCategories() {
return this.state.categories.map((category, index) => (
<Button onPress={() => this.getCategories(category)} key={index}>
{category}
</Button>
));
}
render() {
return (
<View>
<ScrollView horizontal showsHorizontalScrollIndicator={false} style={{marginBottom: 5}}>
{this.renderCategories()}
</ScrollView>
</View>
)
}
---按钮组件---
class Button extends Component {
constructor(props) {
super(props);
this.state = { pressStatus: false };
}
_onHideUnderlay() {
this.setState({ pressStatus: false });
console.log('unpressed')
}
_onShowUnderlay() {
this.setState({ pressStatus: true });
console.log('pressed')
}
render () {
const {buttonStyle, buttonPressedStyle, textStyle} = styles;
return (
<TouchableHighlight onPress={this.props.onPress}
underlayColor={'#fff000'}
activeOpacity={1}
style={[buttonStyle, this.state.pressStatus ? {backgroundColor: '#fff000'} : {backgroundColor: '#1D36FF'}]}
// onHideUnderlay={this._onHideUnderlay.bind(this)}
onShowUnderlay={this._onShowUnderlay.bind(this)}>
<Text style={textStyle}>
{this.props.children}
</Text>
</TouchableHighlight>
);
}
}
const styles = {
buttonStyle: {
marginTop:10,
paddingTop:15,
paddingBottom:25,
marginLeft:10,
// marginRight:10,
paddingLeft: 15,
paddingRight: 15,
backgroundColor:'rgba(99,99,99,0.99)',
borderRadius:10,
borderWidth: 1,
borderColor: '#fff'
},
buttonPressedStyle: {
marginTop:10,
paddingTop:15,
paddingBottom:25,
marginLeft:10,
// marginRight:10,
paddingLeft: 15,
paddingRight: 15,
backgroundColor:'rgba(15,15,15,0.99)',
borderRadius:10,
borderWidth: 1,
borderColor: '#fff'
},
textStyle: {
color:'#fff',
textAlign:'center',
fontSize: 16
},
};
此代码部分工作。当我单击第一个按钮(类别 1)时,它会按预期更改背景颜色,但是当我单击第二个按钮(类别 2)时,按钮类别 1 应该采用初始样式(失去焦点)。
请帮忙。谢谢
【问题讨论】:
-
您想将您的 buttonStyle 更改为 buttonPressedStyle 您按下哪个按钮????我说的对吗???
-
是的,@PrakashKarena。你说的对。这正是我想要的。
-
@PrakashKarena 正如您在代码中看到的那样,我使用的是 backgroundColor 属性而不是样式,但无论哪种方式都可以帮助我解决它
标签: javascript react-native onblur onfocus touchablehighlight