Я новичок в реакции-нативный и перепробовал все, что мог придумать.Я искал похожие темы везде.
У меня есть словарь объектов с 4 объектами, на которые я ссылаюсь для использования в ряду из 4 кнопок TouchableOpacity.Каждая кнопка ссылается на свой объект в словаре, и я хочу, чтобы onPress
установил состояние нажатой кнопки.Только одна из четырех кнопок должна быть в состоянии выбрать в любой момент времени, и выбранная кнопка должна показать, что это выбранная кнопка.
Всякий раз, когда я нажимаю одну из кнопок, я получаю эту ошибку: setState(...): takes an object of state variables to update or a function which returns an object of state variables.
Я запускаю свой код локально, используя Expo на моем Mac с симулятором iOS.
Компонент строки кнопки My TouchableOpacity
FloorLevel.js
import React, { Component } from 'react';
import { StyleSheet, TouchableOpacity, Text, View } from 'react-native';
const floorLevel = {
Basement: 'Basement',
Lower: 'Lower',
Main: 'Main',
Upper: 'Upper'
}
export class FloorLevel extends Component {
constructor(props){
super(props)
this.state = {
floorLevel: {floorLevel}
}
}
render() {
return (
<View style={ styles.container }>
<Text style={{ flexDirection: 'row', justifyContent: 'flex-end', fontWeight: 'bold'}}>Floor Level</Text>
<View style={{flexDirection: 'row'}} >
<TouchableOpacity testID='floorLevelSelection' onPress={() => this.setState(floorLevel.Basement)}>
<Text style={this.state === floorLevel.Basement ? styles.btnActive : styles.btnInactive}>{floorLevel.Basement}</Text>
</TouchableOpacity>
<TouchableOpacity testID='floorLevelSelection' onPress={() => this.setState(floorLevel.Lower)}>
<Text style={this.state === 'Lower' ? styles.btnActive : styles.btnInactive}>{floorLevel.Lower}</Text>
</TouchableOpacity>
<TouchableOpacity testID='floorLevelSelection' onPress={() => this.setState(floorLevel.Main)}>
<Text style={FloorLevel.state === (floorLevel.Main) ? styles.btnActive : styles.btnInactive}>{floorLevel.Main}</Text>
</TouchableOpacity>
<TouchableOpacity testID='floorLevelSelection' onPress={() => this.setState(floorLevel.Upper)}>
<Text style={this.state === (floorLevel.Upper) ? styles.btnActive : styles.btnInactive}>{floorLevel.Upper}</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
marginTop: 5,
textAlign: 'center',
alignItems: 'center',
justifyContent: 'center'
},
btnActive: {
borderWidth:1,
borderColor:'#2196F3',
height: 30,
marginTop: 19,
marginRight: 10,
alignSelf: 'center',
alignItems: 'flex-end',
color: '#2196F3',
fontSize: 12,
fontWeight: 'bold',
textAlign: 'center',
justifyContent: 'flex-start',
backgroundColor:'#fff',
borderRadius:15,
padding: 6
},
btnInactive: {
borderWidth:1,
borderColor:'#B5B5B5',
height: 30,
marginTop: 19,
marginRight: 10,
alignSelf: 'center',
alignItems: 'flex-end',
color: '#B5B5B5',
fontSize: 12,
fontWeight: 'bold',
textAlign: 'center',
justifyContent: 'flex-start',
backgroundColor:'#fff',
borderRadius:15,
padding: 6,
}
});
Я ожидаю, что состояние будет установлено в состояние выбранной кнопки, и выбранная кнопка должна обновиться с styles.btnInactive
до styles.btnActive
.