我正在使用react native开发一个Android应用程序,并且使用了TouchableOpacity组件来创建按钮。
我使用文本输入组件来接受来自用户的文本,并且仅当文本输入与特定字符串匹配时才应启用按钮。
我可以想到一种方法,方法是先在没有TouchableOpactiy包装器的情况下呈现按钮,然后在输入字符串匹配后用包装器重新呈现。
但是我猜想有更好的方法来做到这一点。有人可以帮忙吗?
我正在使用react native开发一个Android应用程序,并且使用了TouchableOpacity组件来创建按钮。
我使用文本输入组件来接受来自用户的文本,并且仅当文本输入与特定字符串匹配时才应启用按钮。
我可以想到一种方法,方法是先在没有TouchableOpactiy包装器的情况下呈现按钮,然后在输入字符串匹配后用包装器重新呈现。
但是我猜想有更好的方法来做到这一点。有人可以帮忙吗?
Answers:
TouchableOpacity
范围TouchableWithoutFeedback
,因此您可以使用disabled
属性:
<TouchableOpacity disabled={true}>
<Text>I'm disabled</Text>
</TouchableOpacity>
disabled
状态不会更改子渲染样式,因此,要使禁用状态对用户可见,您需要将样式应用于Text
元素,例如<Text style={{ opacity: 0.5 }}>I'm disabled</Text>
-仅供参考
这似乎可以使用高阶组件来解决。不过我可能错了,因为我本人很难100%理解它,但是也许会对您有所帮助(这里有几个链接)...
TouchableOpacity接收activeOpacity
。你可以做这样的事情
<TouchableOpacity activeOpacity={enabled ? 0.5 : 1}>
</TouchableOpacity>
因此,如果启用它,它将看起来很正常,否则它将看起来像touchablewithoutfeedback。
这个基于本地的解决方案:
<Button
block
disabled={!learnedWordsByUser.length}
style={{ marginTop: 10 }}
onPress={learnedWordsByUser.length && () => {
onFlipCardsGenerateNewWords(learnedWordsByUser)
onFlipCardsBtnPress()
}}
>
<Text>Let's Review</Text>
</Button>
你可以建立与CustButton TouchableWithoutFeedback
,并设置效果,你想用逻辑onPressIn
,onPressout
或其他道具。
我可以通过在style属性中添加条件来解决此问题。
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
}
})
这是我的工作,希望对您有所帮助:
<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}]}
如果按钮被禁用,则添加opacity属性。
您可以启用和禁用按钮,也可以使用条件或默认情况下直接将其禁用:true
// 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并添加带有样式条件的proppointerEvents。
<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
}