Menonaktifkan tombol pada reaksi asli


155

Saya membuat aplikasi android menggunakan reaksi asli dan saya telah menggunakan komponen TouchableOpacity untuk membuat tombol.
Saya menggunakan komponen input teks untuk menerima teks dari pengguna dan tombol hanya boleh diaktifkan setelah input teks cocok dengan string tertentu.
Saya bisa memikirkan cara untuk melakukan ini dengan awalnya rendering tombol tanpa pembungkus TouchableOpactiy dan rendering ulang dengan pembungkus setelah string input cocok.
Tapi saya kira ada cara yang lebih baik untuk melakukan ini. Adakah yang bisa membantu?

Jawaban:


308

TouchableOpacityluasan TouchableWithoutFeedback, jadi Anda bisa menggunakan disabledproperti:

<TouchableOpacity disabled={true}>
  <Text>I'm disabled</Text>
</TouchableOpacity>

React Native TouchableWithoutFeedback #disabled dokumentasi


Nah, apakah Anda memiliki sesuatu yang mungkin memberi petunjuk tentang apa yang tidak berhasil untuk Anda? Versi RN apa yang Anda gunakan? Bisakah Anda menunjukkan beberapa kode kepada kami? Hanya tautan ke dokumentasi RN untuk membantu Anda: facebook.github.io/react-native/docs/…
Julien Deniau

9
Perhatikan bahwa disablednegara tidak mengubah gaya render anak sehingga untuk membuat negara yang dinonaktifkan terlihat oleh pengguna, Anda perlu menerapkan gaya ke Textelemen seperti <Text style={{ opacity: 0.5 }}>I'm disabled</Text>- hanya FYI
Peter Theill

46

Lakukan saja ini

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

<Text>{text}</FontText>? FontText?
jcollum

11
onPress tidak mengharapkan boolean
Fábio Paiva


3

TouchableOpacity menerima activeOpacity. Anda dapat melakukan sesuatu seperti ini

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

Jadi jika diaktifkan, itu akan terlihat normal, jika tidak, itu akan terlihat seperti disentuh tanpa umpan balik.


1
Tapi itu masih tidak menonaktifkannya. Hanya saja, tidak mengubah opacity saat disentuh.
Jeff P Chacko

1
Anda dapat melakukan sesuatu seperti onPress = {@ someMethod jika diaktifkan}. Dengan cara ini, Anda tidak perlu membungkus tampilan Anda dalam tampilan atau layar sentuh yang berbeda.
eyal83

3

pangkalan asli ini ada solusinya:

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

2

Untuk menonaktifkan Teks, Anda harus mengatur opacity: 0 dalam gaya Teks seperti ini:

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


0

Saya dapat memperbaikinya dengan meletakkan kondisional pada properti 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
}
})

0

Inilah pekerjaan saya untuk ini, saya harap ini membantu:

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

di SignUpStyleSheet.inputStyletahan gaya untuk tombol ketika dinonaktifkan atau tidak, maka di style={this.state.validity ? SignUpStyleSheet.inputStyle : [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}saya menambahkan properti opacity jika tombol dinonaktifkan.


0

Anda dapat mengaktifkan dan menonaktifkan tombol atau dengan menggunakan kondisi atau secara langsung secara default itu akan menonaktifkan: 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

Saya pikir cara yang paling efisien adalah dengan membungkus touchableOpacity dengan tampilan dan menambahkan prop pointerEvents dengan kondisi gaya.

<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
  }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.