单击后如何在 React Native 中禁用按钮
Posted
技术标签:
【中文标题】单击后如何在 React Native 中禁用按钮【英文标题】:How to disable a button in React Native after clicking it 【发布时间】:2018-08-25 08:08:24 【问题描述】:我正在做一个大型项目,但遇到了一些问题。
每次点击登录按钮,都需要一段时间才能建立数据库连接,如果这个按钮是alert,你点击多次,它也会多次显示alert。
这是按钮:
<TouchableOpacity
style=styles.submitButton
onPress=
() => this.login(this.state.email, this.state.password)
>
<Text style=styles.submitButtonText>Login</Text>
</TouchableOpacity>
我想在点击按钮后禁用它,这样警报错误只会出现一次。
这是我要放置禁用按钮的代码的地方:
if (respo == 'Wrong name or password.')
alert("Wrong Username and Password.");
else
if (respo.user.uid > 0)
if (Object.values(respo.user.roles).indexOf("student user") > -1)
AsyncStorage.setItem("u_uid", respo.user.uid);
alert("Login Successfull.");
Actions.home();
else
alert("Only Student user is allowed to login.");
谢谢!
【问题讨论】:
为什么不使用带有disabled
属性的Button
组件?
因为它不会将styles
作为prop
,并且color prop
renders
对于android
和ios
的不同视图。请检查文档@987654321 @
【参考方案1】:
嗯,最简单的逻辑可能是:
-
设置一个变量来跟踪登录过程是否正在进行,例如
var loginInProcess = false
。这可能应该设置在一些跟踪应用程序状态的父组件的状态中,但让我们保持简单。
在onPress
事件中,设置值loginInProcess = true
有条件地执行登录操作,仅当登录未在进行时:
例如:
onPress = () =>
if (!loginInProcess)
loginInProcess = true;
this.login(this.state.email, this.state.password)
else
/*Login in process, do something else*/
>
-
如果登录失败(您的第二个代码块),请重置变量:
loginInProcess = false
以便能够再次尝试“登录”。
【讨论】:
【参考方案2】:我有一个很好的解决方案,你可以用它来禁用按钮
<View style=styles.MainContainer >
<TouchableOpacity
activeOpacity = .5
disabled=true
onPress=this.SampleButtonFunction
>
<Text>Submit</Text>
</TouchableOpacity>
</View>
此 activeOpacity 和禁用适用于此
【讨论】:
以上是关于单击后如何在 React Native 中禁用按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何禁用 Android 上的设备后退按钮(react-native)?
仅在用户按下 React Native 中的按钮后如何获取位置
如何在 React Native 中单击按钮时调用具有不同参数的相同 api
在 react-native-video 中如何禁用搜索功能?
在 React Native 的 iPhone 设置上手动禁用后如何检测 PushNotificationIOS 状态?