我正在使用 React Native 制作一个 Android 应用程序,并且我使用 TouchableOpacity 组件来创建按钮。
我使用文本输入组件来接受来自用户的文本,并且按钮应该仅在文本输入与特定字符串匹配时才启用。
我可以想出一种方法来做到这一点,首先渲染没有 TouchableOpactiy 包装器的按钮,并在输入字符串匹配后使用包装器重新渲染。
但我猜想有更好的方法来做到这一点。有人可以帮忙吗?
TouchableOpacity
扩展了
TouchableWithoutFeedback
,所以你可以只使用
disabled
属性 :
<TouchableOpacity disabled={true}>
<Text>I'm disabled</Text>
</TouchableOpacity>
React Native TouchableWithoutFeedback #disabled 文档
新的Pressable API 也有一个 disabled
选项 :
<Pressable disabled={true}>
{({ pressed }) => (
<Text>I'm disabled</Text>
)}
</Pressable>
<TouchableOpacity activeOpacity={disabled ? 1 : 0.7} onPress={!disabled && onPress}>
<View>
<Text>{text}</Text>
</View>
</TouchableOpacity>
<Button
block
disabled={!learnedWordsByUser.length}
style={{ marginTop: 10 }}
onPress={learnedWordsByUser.length && () => {
onFlipCardsGenerateNewWords(learnedWordsByUser)
onFlipCardsBtnPress()
}}
>
<Text>Let's Review</Text>
</Button>
<TouchableOpacity disabled={true}>
<Text>
This is disabled button
</Text>
</TouchableOpacity>
disabled是React Native中的一个道具,当你将其值设置为“true”时,它将禁用你的按钮
快乐编程
activeOpacity
。你可以做这样的事情
<TouchableOpacity activeOpacity={enabled ? 0.5 : 1}>
</TouchableOpacity>
因此,如果启用它,它看起来会很正常,否则,它看起来就像是可触摸的,没有反馈。
<TouchableOpacity style={{opacity:0}}>
<Text>I'm disabled</Text>
</TouchableOpacity>
<TouchableOpacity disabled = { stringMatched ? false : true }>
<Text>Some Text</Text>
</TouchableOpacity>
其中 stringMatched 是一个状态。
const startQuizDisabled = () => props.deck.cards.length === 0;
<TouchableOpacity
style={startQuizDisabled() ? styles.androidStartQuizDisable : styles.androidStartQuiz}
onPress={startQuiz}
disabled={startQuizDisabled()}
>
<Text
style={styles.androidStartQuizBtn}
>Start Quiz</Text>
</TouchableOpacity>
const styles = StyleSheet.create({
androidStartQuiz: {
marginTop:25,
backgroundColor: "green",
padding: 10,
borderRadius: 5,
borderWidth: 1
},
androidStartQuizDisable: {
marginTop:25,
backgroundColor: "green",
padding: 10,
borderRadius: 5,
borderWidth: 1,
opacity: 0.4
},
androidStartQuizBtn: {
color: "white",
fontSize: 24
}
})
<View style={this.state.disabled && commonStyles.buttonDisabled}
pointerEvents={this.state.disabled ? "none" : "auto"}>
<TouchableOpacity
style={styles.connectButton}>
<Text style={styles.connectButtonText}">CONNECT </Text>
</TouchableOpacity>
</View>
CSS:
buttonDisabled: {
opacity: 0.7
}
<TouchableOpacity
onPress={() => {
this.onSubmit()
}}
disabled={this.state.validity}
style={this.state.validity ?
SignUpStyleSheet.inputStyle :
[SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}>
<Text style={SignUpStyleSheet.buttonsText}>Sign-Up</Text>
</TouchableOpacity>
在
SignUpStyleSheet.inputStyle
中保存按钮禁用或未禁用时的样式,然后在
style={this.state.validity ? SignUpStyleSheet.inputStyle : [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}
中,如果按钮禁用,我添加不透明度属性。
// in calling function of button
handledisableenable()
{
// set the state for disabling or enabling the button
if(ifSomeConditionReturnsTrue)
{
this.setState({ Isbuttonenable : true })
}
else
{
this.setState({ Isbuttonenable : false})
}
}
<TouchableOpacity onPress ={this.handledisableenable} disabled=
{this.state.Isbuttonenable}>
<Text> Button </Text>
</TouchableOpacity>
<TouchableOpacity disabled={true}> </TouchableOpacity>
您可以将
onPressOut 事件添加到 TouchableOpcaity 并做任何你想做的事。 它不会让用户再次按下,直到 onPressOut 完成
<TouchableOpacity disabled={currentImageIndex === 0}> //currentImageIndex is just a condition when button is disable.
<View>
<Text>{text}</Text>
</View>
</TouchableOpacity>