React Native表单验证输入时触发Cannot read property 'value' of undefined如何解决
错误触发原因
- React Native 框架中
TextInput组件的onChangeText回调的返回值是用户输入的纯文本字符串,并非 Web 端 React 输入框的事件对象。你代码中使用的e.target.value是 Web 端的写法,此处的e本身就是输入的文本,不存在target属性,访问e.target会得到undefined,读取value就会抛出对应错误。 - 额外问题:你当前的确认密码输入框没有绑定状态更新和匹配校验逻辑,会导致后续提交时永远提示确认密码为空、密码不匹配校验失效。
修复步骤
- 修改邮箱输入框的
onChangeText回调
原代码:
onChangeText={(e) => this.setState({ textInputEmail: e.target.value })}
修改为:
onChangeText={(text) => this.setState({ textInputEmail: text })}
- 修改密码输入框的
onChangeText回调
原代码:
onChangeText={(e) => this.setState({ currentPassword: e.target.value })}
修改为:
onChangeText={(text) => this.setState({ currentPassword: text })}
- 补充确认密码输入框的绑定逻辑,给对应
TextInput组件新增两个属性:
onChangeText={(text) => this.setState({ confirmTextInput: text })} onEndEditing={(e) => this.isMatch(e.nativeEvent.text)}
- 优化密码匹配校验逻辑,原逻辑只有输入不匹配时会更新状态,匹配时无法恢复为正常状态,修改
isMatch方法:
原代码:
isMatch = (text) => { if (text != this.state.currentPassword) { this.setState({ isEqual: false }) } }
修改为:
isMatch = (text) => { this.setState({ isEqual: text === this.state.currentPassword }) }
内容的提问来源于stack exchange,提问作者Vladimir
相关产品推荐
相关产品推荐

