React Native表单验证报错:this.validate is not a function 求助
解决
this.validate is not a function报错问题 嘿,这个报错我之前处理过,大概率是方法的上下文绑定不正确导致的,咱们一步步来排查解决:
核心原因
当你点击按钮触发_onPressButton时,方法内部的this并没有指向你的FormTest组件实例,自然找不到从ValidationComponent继承来的validate方法。
具体解决办法
方法1:在构造函数中手动绑定this
在组件的constructor里,把_onPressButton方法绑定到组件实例上:
import React, {Component} from 'react'; import {View, Text, TextInput, TouchableHighlight} from 'react-native'; import ValidationComponent from 'react-native-form-validator'; export default class FormTest extends ValidationComponent { constructor(props) { super(props); this.state = { name : "My name", email: "tibtib@gmail.com", number:"56" }; // 关键:绑定方法到组件实例 this._onPressButton = this._onPressButton.bind(this); } _onPressButton() { // 现在可以正常调用validate方法了 this.validate({ name: {required: true}, email: {required: true, email: true}, number: {numbers: true} }); // 验证通过后处理逻辑 if (this.isFormValid()) { console.log("表单验证通过!"); // 这里写提交逻辑 } } render() { return ( <View> {/* 你的表单输入组件 */} <TouchableHighlight onPress={this._onPressButton}> <Text>提交表单</Text> </TouchableHighlight> </View> ); } }
方法2:用箭头函数定义_onPressButton
箭头函数会自动绑定当前组件的上下文,不用手动绑定:
// 直接用箭头函数定义方法 _onPressButton = () => { this.validate({ name: {required: true}, email: {required: true, email: true}, number: {numbers: true} }); if (this.isFormValid()) { // 处理提交 } }
方法3:在onPress中直接使用箭头函数
如果不想修改方法定义,也可以在TouchableHighlight的onPress属性里直接用箭头函数调用:
<TouchableHighlight onPress={() => this._onPressButton()}> <Text>提交表单</Text> </TouchableHighlight>
额外排查点
如果上面的方法都没用,建议检查:
- 确认
react-native-form-validator已经正确安装,执行npm install react-native-form-validator --save重新安装依赖 - 检查你的React Native版本和
react-native-form-validator的版本是否兼容,避免版本不匹配导致继承方法失效
内容的提问来源于stack exchange,提问作者PremKumar
相关产品推荐
相关产品推荐

