react-native - TouchableHighlight 未被禁用
问题描述
如果表单无效,将禁用属性设置为TouchableHighlight
to{!isFormValid()}
不会禁用它。
我为此使用react-native-form-validator:
以下是代码片段:
<TouchableHighlight style={[styles.buttonContainer, styles.loginButton]}
onPress={this._onSubmit}
disabled={!this.state.isValid}>
<Text style={styles.loginText}>Login</Text>
</TouchableHighlight>
_isValid
功能如下:
export default class LoginScreen extends ValidationComponent {
constructor(props) {
super(props);
this.state = {
isValid: false,
email : '',
password: '',
}
}
_isValid = () => {
this.setState(this.isValid,this.isFormValid());
}
谢谢, 菲拉斯
解决方案
第一个问题
是你如何setState
在你的组件上......setState
函数采用object
你新更改的字段。
_isValid = () => {
const isValid = this.isFormValid();
this.setState({ isValid: isValid }); // < Look at this
}
第二个问题
为了立即更新您的按钮状态(禁用启用)..您需要this.validate(...)
在每个 textInput 字段的 onBlur 事件上执行,并相应地更改表单的状态...调用setState
将强制您的组件成为重新渲染,因此您的TouchableHighlight
按钮状态将相应更新。
onBlur = () => {
this.validate(...);
const isValid = this.isFormValid();
this.setState({ isValid: isValid });
};
建议
我建议使用redux-form或formik来更好地处理Field-Level-Validation或Blur-Validation
推荐阅读
- c# - 如果值在此行中,如何获取行号并返回它
- angular - 如何以角度 6 翻译枚举
- java - Java - 将类型传递给超类静态方法
- azure - 在 Azure API 管理中设置并发限制
- nginx - 启用 HTTP2 服务器推送 Nginx
- xamarin - 使用 xamarin 表单在列表视图中填充空值
- java - 自定义注释 && 方面错误 java.lang.IllegalArgumentException: 错误类型引用不是注释类型
- php - PHP 显示天数、小时数和分钟数
- json - 使用 Codable 协议或外部工具进行 JSON 映射
- c# - 在 MVC 中的同一页面上渲染两个控制器/视图