禁用本机反应按钮

问题描述 投票:0回答:16

我正在使用 React Native 制作一个 Android 应用程序,并且我使用 TouchableOpacity 组件来创建按钮。
我使用文本输入组件来接受来自用户的文本,并且按钮应该仅在文本输入与特定字符串匹配时才启用。 我可以想出一种方法来做到这一点,首先渲染没有 TouchableOpactiy 包装器的按钮,并在输入字符串匹配后使用包装器重新渲染。
但我猜想有更好的方法来做到这一点。有人可以帮忙吗?

react-native
16个回答
433
投票

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>
    

60
投票
就这样做

<TouchableOpacity activeOpacity={disabled ? 1 : 0.7} onPress={!disabled && onPress}> <View> <Text>{text}</Text> </View> </TouchableOpacity>
    

7
投票
这个原生库有解决方案:

<Button block disabled={!learnedWordsByUser.length} style={{ marginTop: 10 }} onPress={learnedWordsByUser.length && () => { onFlipCardsGenerateNewWords(learnedWordsByUser) onFlipCardsBtnPress() }} > <Text>Let's Review</Text> </Button>
    

5
投票
因此很容易禁用 React Native 中的任何按钮

<TouchableOpacity disabled={true}> <Text> This is disabled button </Text> </TouchableOpacity>

disabled是React Native中的一个道具,当你将其值设置为“true”时,它将禁用你的按钮

快乐编程


4
投票
这似乎是可以使用高阶组件来解决的问题。我可能是错的,因为我自己很难百分百理解它,但也许它会对你有帮助(这里有几个链接)...

  • http://www.bennadel.com/blog/2888-experimenting-with-higher-order-components-in-reactjs.htm
  • http://jamesknelson.com/structuring-react-applications-higher-order-components/

3
投票
TouchableOpacity 接收

activeOpacity

。你可以做这样的事情

<TouchableOpacity activeOpacity={enabled ? 0.5 : 1}> </TouchableOpacity>

因此,如果启用它,它看起来会很正常,否则,它看起来就像是可触摸的,没有反馈。


2
投票
要禁用文本,您必须在文本样式中设置不透明度:0,如下所示:

<TouchableOpacity style={{opacity:0}}> <Text>I'm disabled</Text> </TouchableOpacity>
    

2
投票
当您的输入与字符串不匹配时,您可以在 TouchableOpacity 中使用禁用属性

<TouchableOpacity disabled = { stringMatched ? false : true }> <Text>Some Text</Text> </TouchableOpacity>
其中 stringMatched 是一个状态。


1
投票
您可以使用

TouchableWithoutFeedback

构建一个CustButton,并使用onPressIn
onPressout
或其他道具设置您想要的效果和逻辑。 


1
投票
我可以通过在样式属性中添加条件来解决此问题。

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 } })
    

1
投票
我认为最有效的方法是用视图包装 touchableOpacity 并添加带有样式条件的 prop pointerEvents 。

<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 }
    

0
投票
这是我的解决方法,希望对您有所帮助:

<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}]}
 中,如果按钮禁用,我添加不透明度属性。


0
投票
您可以启用和禁用按钮或通过使用条件或直接默认它将被禁用: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>
    

0
投票
使用禁用的真实属性

<TouchableOpacity disabled={true}> </TouchableOpacity>
    

0
投票
这是有史以来最简单的解决方案:

您可以将

onPressOut 事件添加到 TouchableOpcaity 并做任何你想做的事。 它不会让用户再次按下,直到 onPressOut 完成


0
投票
就用这个

<TouchableOpacity disabled={currentImageIndex === 0}> //currentImageIndex is just a condition when button is disable. <View> <Text>{text}</Text> </View> </TouchableOpacity>
    
© www.soinside.com 2019 - 2024. All rights reserved.