#class #react-native #touchablehighlight
#класс #react-native #touchablehighlight
Вопрос:
Я совершенно новичок в react, используя TouchableHighlight, я создал класс,
import React, { Component } from "react";
import { Text, View, Image, TouchableHighlight } from "react-native";
export default class ChooseProComp extends Component {
render() {
return (
<TouchableHighlight
underlayColor="transparent"
onPress={this.props.onPress}
style={{ flex: 1 }}
>
<View
style={{
marginRight: this.props.mr,
borderRadius: 3,
backgroundColor: "#ffffff",
borderWidth: 0.7,
borderColor: "#e1e1e1",
}}
>
<View style={{ flexDirection: "row", padding: 8 }}>
<Image
style={{
width: 26,
height: 26
}}
source={this.props.typeImage}
/>
<Text
style={{
fontSize: 13,
alignSelf: "center",
marginLeft: 8,
color: "#737f8d"
}}
>
{this.props.type}
</Text>
</View>
</View>
</TouchableHighlight>
);
}
}
Я импортировал класс ChooseProComp в другой компонент, подобный этому, я не уверен, нужно ли мне добавлять пользовательский метод.
<View style={{ flexDirection: "row", marginBottom: 6 }}>
<ChooseProComp
mr={7}
typeImage={require("../../../Images/homescreen/typeicons/medical/medical.png")}
type="Medical"
onPress={() => this.renderType("Medical")
}
/>
<ChooseProComp
typeImage={require("../../../Images/homescreen/typeicons/dental/dental.png")}
type="Dental"
onPress={() => this.renderType("Dental")}
/>
</View>
<View style={{ flexDirection: "row", marginBottom: 6 }}>
<ChooseProComp
mr={7}
typeImage={require("../../../Images/homescreen/typeicons/homiopathi/homia.png")}
type="Homeopathy"
onPress={() => this.renderType("Homeopathy")}
/>
<ChooseProComp
typeImage={require("../../../Images/homescreen/typeicons/ayurveda/ayurveda.png")}
type="Ayurveda"
onPress={() => this.renderType("Ayurveda")}
/>
</View>
<View
style={{ flexDirection: "row", marginBottom: 6, marginBottom: 25 }}
>
<ChooseProComp
mr={7}
typeImage={require("../../../Images/homescreen/typeicons/yoga/yoga.png")}
type="Yogic science"
onPress={() => this.renderType("Yogic science")}
/>
<ChooseProComp
typeImage={require("../../../Images/homescreen/typeicons/unani/unani.png")}
type="Unani"
onPress={() => this.renderType("Unani")}
/>
</View>
Поэтому, когда я выбираю определенный тип, например Medical, я хочу отключить классы ChooseProComp других типов. Пожалуйста, помогите мне с этим. Непрозрачность других типов также должна быть уменьшена.
Комментарии:
1. Что означает «отключить»? Что вы больше не можете их выбирать?
2. да, я не хочу, чтобы пользователь выбирал другие типы, когда выбран один тип
3. Хорошо, я думаю, вы можете обработать массив «отключенных» значений в главном компоненте, передать отключенный реквизит каждому дочернему элементу и использовать его в TouchableHighlight (поскольку он его поддерживает)
4. Я не понял, не могли бы вы, пожалуйста, уточнить?
5. Я попытаюсь привести пример
Ответ №1:
Поскольку кажется, что вы хотите выбрать только один элемент ( <ChooseProComp>
), я предлагаю вам просто обработать выбранный элемент в состоянии вашего основного компонента, которое вначале будет неопределенным:
state = {
selected: undefined
};
Затем определите функцию onPress для каждого <ChooseProComp>
подобного:
onPress={() => {
this.renderType("Medical"); // I don't know how this works so I won't modify it
if(!this.state.selected){ // if the state is undefined, then set it!
this.setState({
selected: "Medical"
})
}
}
Затем снова для каждого <ChooseProComp>
передайте prop disabled
типа:
<ChooseProComp
...
disabled={this.state.selected amp;amp; this.state.selected !== 'Medical'}
/>
Итак, в <ChooseProComp>
компоненте (классе) вы можете использовать его в <TouchableHighlight>
:
<TouchableHighlight
underlayColor="transparent"
onPress={this.props.onPress}
style={{ flex: 1 }}
disabled={this.props.disabled}
>
Дайте мне знать, соответствует ли это вашему вопросу, или я неправильно понял, или это недостаточно ясно!
Комментарии:
1. Отлично! это сработало! Мне просто нужно добавить непрозрачность для отключенных элементов. Если все будет сделано, я получу то, что имел в виду! Большое спасибо!
2. есть ли хорошая практика добавления непрозрачности к отключенным элементам?? дайте мне знать!
3. Можете ли вы объяснить лучше или предоставить изображение вашего запроса?
4. вот оно, если я выбираю профессию Medical, другие опции отключаются. Теперь я хочу, чтобы непрозрачность отключенных параметров была равна 0,5, а параметр select равен 1.
5. Я думаю, вы только что ответили сами. Просто добавьте
style={{ flex: 1, opacity: this.props.disabled ? 0.5 : 1}}
в свой<TouchableHighlight>