Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React Native-表单字段验证:无法为密码确认创建密码验证_Javascript_Reactjs_Forms_Validation_React Native - Fatal编程技术网

Javascript React Native-表单字段验证:无法为密码确认创建密码验证

Javascript React Native-表单字段验证:无法为密码确认创建密码验证,javascript,reactjs,forms,validation,react-native,Javascript,Reactjs,Forms,Validation,React Native,我正在注册表中建立pin验证,以检查第一个pin是否与第二个匹配。我创建了一个validatePinConfirmation函数来检查pin是否等于pin_confirmation。如果是,则我们将pin_确认状态设置为用户插入的值。由于某些原因,函数或表单没有传递值并将其保存到数据库。如果有人能准确指出我做错了什么,我将不胜感激 import React,{Component}来自'React'; 从“react native”导入{View,AsyncStorage}; 从'native

我正在注册表中建立pin验证,以检查第一个pin是否与第二个匹配。我创建了一个validatePinConfirmation函数来检查pin是否等于pin_confirmation。如果是,则我们将pin_确认状态设置为用户插入的值。由于某些原因,函数或表单没有传递值并将其保存到数据库。如果有人能准确指出我做错了什么,我将不胜感激

import React,{Component}来自'React';
从“react native”导入{View,AsyncStorage};
从'native base'导入{表单、项目、输入、标签、按钮、文本};
从“axios”导入axios;
从'App'导入{JWT};
类注册表单扩展组件{
建造师(道具){
超级(道具);
此.state={
名称:“”,
电子邮件:“”,
电子邮件验证:“”,
pin:“”,
pinValidate:“”,
角色:'消费者',
pin_确认:“”
};
}
validateEmail(文本、类型){
alph=/[a-z0-9!#$%&'*+/=?(?:\.[a-z0-9!#$%&'*+/=?(?:[a-z0-9!(?:[a-z0-9-]*[a-z0-9])+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+[a-z0-9](?:[a-z0-z0-9-];
如果(类型==“电子邮件”){
if(阿尔法试验(文本)){
this.setState({emailValidate:true});
}否则{
this.setState({emailValidate:false});
}
}
if({emailValidate:true}){
this.setState({email:text});
}
}
确认(文本){
const{pin,pin_confirmation}=this.state;
if(text==pin){
this.setState({pinValidate:true});
}否则{
this.setState({pinValidate:false});
}
if({pinValidate:true}){
这个.setState({pin_confirmation});
}
}
onSubmit=()=>{
const{name,email,pin,role,pin_confirmation}=this.state;
axios
.post('http://0.0.0.0:4000/api/v1/sign_up', {
用户:{
名称
电子邮件,
别针,
角色
pin_确认
}
})
。然后(响应=>{
AsyncStorage.setItem('JWT',response.data.JWT));
console.log(response.data.jwt);
this.props.navigation.navigate('Profile');
})
.catch(错误=>{
console.log(错误);
});
};
render(){
返回(
名称
{
this.setState({name});
}}
/>
电子邮件
this.validateEmail(文本“email”)}
/>
别针
{
这个.setState({pin});
}}
/>
Pin码确认
此.validated(文本)}
/>
提交
);
}
}
出口违约登记表请尝试以下操作:

<Input
    keyboardType={'number-pad'}
    secureTextEntry
    value={this.state.pin_confirmation}
    onChangeText={this.validatePinConfirmation.bind(this)}
/>


的上下文超出了您要使用的范围。让我知道这是否有效。您可能也必须对提交的
执行相同的操作。

使用function关键字创建的内部函数未定义&这是您面临的问题您有两个选择

  • 使用.bind()函数this.validateConfirmation.bind(this)
  • 例如,使用箭头函数,确认应定义为流

    validatePinConfirmation=(text)=>{/*您的代码*/}//这里不是未定义的,因为arrow函数保留封闭词汇上下文的this值


  • 您可以通过此

    以及其他建议了解更多信息,以修复您的支票

    if ({ emailValidate: true }) {
    
    由于任何对象都转换为布尔值
    true
    ,因此始终会执行此操作。 我相信你需要检查一下

    if (this.state.emailValidate) {
    
    但这实际上不起作用,因为
    .setState()
    是。也就是说:调用
    .setState
    不会立即更改状态。 所以最好引入interm变量并检查它:

    let isEmailValid = true;
    ...
    this.setState({emailValidate: isEmailValid});
    if (isEmailValid) {
        this.setState({email: text});
    

    @isProf感谢您的评论。我照你说的做了,但现在模拟器告诉我pin_确认未定义。我尝试将pin_确认作为参数传递给validatepin确认函数,但没有成功。你认为我应该怎么做?@alydabous检查所有访问
    this
    并作为回调传递的函数。他们都需要通过使用
    bind(this)
    @isProf了解上下文。如果我不明白,你能详细说明一下吗?:)非常感谢。在构造函数中的某个地方调用一次
    bind()
    不是更好吗?在模板中执行此操作将返回新函数,因此
    输入将与其父容器中的任何更改一起重新呈现。