Tworzę aplikację na Androida przy użyciu React Native i do tworzenia przycisków użyłem komponentu TouchableOpacity.
Używam komponentu do wprowadzania tekstu, aby akceptować tekst od użytkownika, a przycisk powinien być włączony tylko wtedy, gdy wprowadzony tekst pasuje do określonego ciągu.
Mogę wymyślić sposób, aby to zrobić, początkowo renderując przycisk bez opakowania TouchableOpactiy i ponownie renderując go z opakowaniem po dopasowaniu ciągu wejściowego.
Ale zgaduję, że jest o wiele lepszy sposób na zrobienie tego. Czy ktoś może pomóc?
react-native
Jeff P Chacko
źródło
źródło
disabled
stan nie zmienia potomnych stylów renderowania, więc aby stan wyłączony był widoczny dla użytkowników, musisz zastosować styl doText
elementu, taki jak<Text style={{ opacity: 0.5 }}>I'm disabled</Text>
- tylko do Twojej wiadomościPo prostu zrób to
źródło
<Text>{text}</FontText>
? FontText?Wydaje się, że jest to coś, co można rozwiązać za pomocą komponentu wyższego rzędu. Mogę się jednak mylić, ponieważ sam staram się to zrozumieć w 100%, ale może to ci się przyda (tutaj jest kilka linków) ...
źródło
TouchableOpacity odbiera
activeOpacity
. Możesz zrobić coś takiegoWięc jeśli jest włączony, będzie wyglądał normalnie, w przeciwnym razie będzie wyglądał jak dotykowy bez informacji zwrotnej.
źródło
ta natywna baza jest rozwiązaniem:
źródło
Aby wyłączyć tekst, musisz ustawić krycie: 0 w stylu tekstu w następujący sposób:
źródło
Można zbudować z CustButton
TouchableWithoutFeedback
i ustawić efekt i logiki chcesz zonPressIn
,onPressout
lub inne rekwizyty.źródło
Udało mi się to naprawić, umieszczając warunek we właściwości stylu.
źródło
Oto moja praca, mam nadzieję, że to pomoże:
in
SignUpStyleSheet.inputStyle
przechowuje styl przycisku, gdy jest wyłączony lub nie, a następniestyle={this.state.validity ? SignUpStyleSheet.inputStyle : [SignUpStyleSheet.inputAndButton, {opacity: 0.5}]}
dodaję właściwość krycia, jeśli przycisk jest wyłączony.źródło
Możesz włączać i wyłączać przycisk lub używając warunku lub bezpośrednio, domyślnie zostanie on wyłączony: true
źródło
Myślę, że najbardziej wydajnym sposobem jest owinięcie elementu touchableOpacity widokiem i dodanie elementu pointerEvents z warunkiem stylu.
CSS:
źródło