javascript - 无法在表单验证中读取未定义的属性“值”
问题描述
我有一个问题。我试图验证我的表单并检查输入的值。它工作正常。但是当我尝试在输入中写入文本时,我收到错误“无法读取未定义的属性'值'”。我不明白这件事。为什么我会得到它?我怎样才能摆脱它?非常感谢。
这是我的代码:
import React, { Component, useState } from 'react'
import { View, TextInput } from 'react-native'
import { MyButton, ErrorMessage } from '../uikit'
import { FormStyle, InputStyle } from '../constants/styles'
import { LOG_IN } from '../routes'
export class SignIn extends Component {
state = {
isValidPasword: true,
isEqual: true,
isValidMail: true,
currentPassword: '',
textInputEmail: '',
confirmTextInput: ''
}
isValid = () => {
const {
isEqual, isValidPasword, isValidMail,
currentPassword, textInputEmail, confirmTextInput
} = this.state
if (textInputEmail == '') {
return alert("Email is empty!")
}
if (!isValidMail) {
return alert("Email is invalid!")
}
if (currentPassword == '') {
return alert("Password is empty!")
}
if (!isValidPasword) {
return alert("Password is invalid!")
}
if (!isEqual) {
return alert("Passwords aren't matching")
}
if (confirmTextInput == '') {
return alert("'Confirm password' field is empty!")
}
this.props.navigation.navigate(LOG_IN)
}
isEnoughSymbols = (text) => {
if (text.trim().length < 8) {
this.setState({ isValidPasword: false })
}
else {
this.setState({ isValidPasword: true })
}
}
isMatch = (text) => {
if (text != this.state.currentPassword) {
this.setState({ isEqual: false })
}
}
isMail = (text) => {
const pattern = /\b[a-z0-9._]+@[a-z0-9.-]+\.[a-z]{2,4}\b/i
let res = text.search(pattern)
res == -1 ? this.setState({ isValidMail: false }) : this.setState({ isValidMail: true })
}
checkEmptyness = (value) => {
return !value ? false : true
}
render() {
const { mainContainer, buttons } = FormStyle
const { container, text } = InputStyle
const { isValidPasword, isEqual, isValidMail, currentPassword } = this.state
return (
<View style={mainContainer}>
<View style={container}>
<TextInput
style={text}
placeholder={'Email'}
onChangeText={(e) => this.setState({ textInputEmail: e.target.value })}
onEndEditing={(e) => this.isMail(e.nativeEvent.text)}
>
</TextInput>
{
isValidMail ? null : <ErrorMessage errorText={'Invalid email!'} />
}
</View>
<View style={container}>
<TextInput
style={text}
placeholder={'Password'}
secureTextEntry={true}
onChangeText={(e) => this.setState({ currentPassword: e.target.value })}
onEndEditing={(e) => this.isEnoughSymbols(e.nativeEvent.text)}
>
</TextInput>
{
isValidPasword ? null : <ErrorMessage errorText={'Password must have at least 8 symbols!'} />
}
</View>
<View style={container}>
<TextInput
style={text}
secureTextEntry={true}
placeholder={'Confirm password'}
>
</TextInput>
{
isEqual ? null : <ErrorMessage errorText={'Passwords not matching'} />
}
</View>
<View style={buttons}>
<MyButton
name={'confirm'.toUpperCase()}
onPress={() => this.isValid()} />
</View>
</View>
)
}
}
解决方案
这是因为您像这样绑定 onChange 函数: onChangeText={(e) => this.setState({ currentPassword: e.target.value })}
您可以直接使用: onChangeText={(e) => this.setState({ currentPassword: e })}
推荐阅读
- shortcode - 如何从自定义标签(简码)的代码中访问 11ty 中的页面前端数据?
- django - 在另一个模型中的条件下从一个模型中获取所有项目
- glog - 将 Google Logger 打印格式(即 <<)转换为 spdlog 打印格式的宏扩展
- javascript - 如何修改或删除日历事件?
- node.js - 用于 webhook 的 NodeJS 侦听器返回空主体
- github - Github 操作、pip 和 PATH
- html - 防止背景颜色重叠透明图标
- javascript - 如何将浏览器版本的ffmpeg.wasm输出的视频元数据打印到谷歌浏览器的控制台?
- c - gcc 奇怪的 -O0 代码生成。简单的malloc。指向多维数组的指针
- flutter - 在 null Flutter 错误上调用该方法