Emailvalidator (require("email-validator") 停止工作

Emailvalidator (require("email-validator") stopped working

我正在我的注册表单中进行电子邮件验证,但突然间它不再起作用了。我没有更改 signup.js 文件,所以有点奇怪。我今天开始处理 login.js 文件,所以可能有一些 'interference',但老实说,我不知道该往哪里看。

这里是 signup.js,我将不再有效的 emailvalidation 以粗体显示。

import React, { Component } from 'react';
import { Text, StyleSheet, TouchableOpacity, Image, TextInput, View } from 'react-native';
import firebase from 'react-native-firebase';
var validator = require("email-validator");

export default class loginComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {firstName: ''};
    this.state = {lastName: ''};
    this.state = {email: ''};
    this.state = {password: ''};
    this.state = {emailValidated: false};
    this.state = {errorMessage: null};
  }

  handleSignUp = () => {
    firebase
      .auth()
      .createUserWithEmailAndPassword(this.state.email, this.state.password)
      .then(() => this.props.navigation.navigate('Main'))
      .catch(error => this.setState({ errorMessage: error.message }))
  }

  render() {

  function renderEmailValidationState(emailInput) {

      if(validator.validate(emailInput)) {
        return false;
      } else {
        return true;
    }
    }

    return (
      <View style={styles.container}>
       <View style={styles.logoContainer} >
        <Image source={require('./assets/logo.png')} style={styles.logo}></Image>
        <Text style={styles.slush}>
           Lenen of huren, {"\n"}   bij de buren!
        </Text>
       </View>
       <View style={styles.formContainer}>

       <View style={styles.inputTextFieldContainer}>
       {this.state.errorMessage &&
          <Text style={{ color: 'red' }}>
            {this.state.errorMessage}
          </Text>
          }
       <TextInput
          style={styles.inputTextField}
          placeholder="Enter you first name"
          value={this.state.text}
          backgroundColor="white"
          onChangeText={(firstName) => this.setState({firstName})}
        />
        <TextInput
          style={styles.inputTextField}
          placeholder="Enter you last name"
          value={this.state.text}
          backgroundColor="white"
          onChangeText={(lastName) => this.setState({lastName})}
        />
        <TextInput
          style={styles.inputTextField}
          placeholder="Enter your e-mail"
          value={this.state.text}
          backgroundColor="white"
          onChangeText={(email) => this.setState({email})}
        />

        <TextInput
          style={styles.inputTextField}
          placeholder="Enter your password"
          value={this.state.password}
          backgroundColor="white"
          onChangeText={(password) => this.setState({password})} 
        />
        <TouchableOpacity 
        disabled= {renderEmailValidationState(this.state.email)} 
        style={styles.buttonContainer}
        onPress={this.handleSignUp}
        > 

          <View>
            <Text style={styles.buttonText}>Sign up!</Text>
          </View>
        </TouchableOpacity>

        <Text style={styles.plainText}>
          Already a user?
        </Text>
        <TouchableOpacity 
        style={styles.buttonContainer}
        onPress={() => this.props.navigation.navigate('Login')}
        > 
          <View>
            <Text style={styles.buttonText}>Login!</Text>
          </View>
        </TouchableOpacity>
      </View>
      </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
   flex: 2,
   padding:10, 
   backgroundColor:'#c6f1e7', 
   alignItems: 'stretch',
   justifyContent: 'space-around'
   },
  logoContainer: {
    padding: 10, 
    height: 250,   
    justifyContent: 'center' , 
    alignItems: 'center'
  },

  logo: {
    width: 250,
    height: 250
  },
  slush: {
    fontSize: 20,
    color: '#59616e',
    fontFamily: 'Raleway-Regular'
  },
  formContainer: {
    flex:1,
    padding: 10, 
  },
  inputTextFieldContainer: {
    padding: 100, 
    justifyContent: 'space-between', 
    alignItems: 'center',
    marginBottom: 30
  },
  inputTextField: { 
    padding: 10, 
    height: 40, 
    width: 300,
    marginBottom: 10,
    fontSize: 16,
    fontFamily: 'Raleway-Regular',
  },
  buttonContainer: {
    padding: 10, 
    marginBottom: 20, 
    width: 300, 
    alignItems: 'center', 
    backgroundColor: '#acdcd7',

  },
  buttonText: {
    padding: 1,
    fontSize: 16,
    color: '#59616e',
    fontFamily: 'Raleway-Regular',
  },
  plainText: {
    padding: 1,
    fontSize: 16,
    marginBottom: 5,
    fontFamily: 'Raleway-Regular',
    color: '#59616e'
  },
});

这是 login.js,但正在进行中。

import React, { Component } from 'react';
import { Text, StyleSheet, TouchableOpacity, Image, TextInput, View } from 'react-native';
import firebase from 'react-native-firebase';
var validator = require("email-validator");

export default class loginComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {email: ''};
    this.state = {password: ''};
    this.state = {emailValidated: false};
    this.state = {errorMessage: null};
  }

  render() {

  function renderEmailValidationState(emailInput) {
      if(validator.validate(emailInput)) {
        return false;
      } else {
        return true;
    }
    }
    return (
      <View style={styles.container}>
      <View style={styles.logoContainer}>
        <Image source={require('./assets/logo.png')} style={styles.logo}></Image>
        <Text style={styles.slush}>
           Huren bij de buren!
        </Text>
       </View>
      <View style={styles.formContainer}>
       <View style={styles.inputTextFieldContainer}>
       {this.state.errorMessage &&
          <Text style={{ color: 'red' }}>
            {this.state.errorMessage}
          </Text>
          }
        <TextInput
          style={styles.inputTextField}
          placeholder="Enter your e-mail"
          value={this.state.text}
          backgroundColor="white"
          onChangeText={(email) => this.setState({email})}
        />

        <TextInput
          style={styles.inputTextField}
          placeholder="Enter your password"
          value={this.state.password}
          backgroundColor="white"
          onChangeText={(password) => this.setState({password})} 
        />
        <TouchableOpacity 
        **disabled= {renderEmailValidationState(this.state.email)}** 
        style={styles.buttonContainer}
        onPress={this.handleSignUp}
        > 
          <View>
            <Text style={styles.buttonText}>Sign up!</Text>
          </View>
        </TouchableOpacity>
        <Text style={styles.plainText}>
          Don't have an account?
        </Text>
        <TouchableOpacity 
        style={styles.buttonContainer}
        onPress={() => this.props.navigation.navigate('SignUp')}
        > 
          <View>
            <Text style={styles.buttonText}>Register!</Text>
          </View>
        </TouchableOpacity>
      </View>
      </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
   flex: 2,
   padding:10, 
   backgroundColor:'#c6f1e7', 
   alignItems: 'stretch',
   justifyContent: 'space-around'
   },
  logoContainer: {
    padding: 10, 
    height: 350,   
    justifyContent: 'center' , 
    alignItems: 'center'
  },

  logo: {
    width: 250,
    height: 250
  },
  slush: {
    fontSize: 25,
    color: '#59616e',
    fontFamily: 'Raleway-Regular'
  },
  formContainer: {
    flex:1,
    padding: 10, 
  },
  inputTextFieldContainer: {
    padding: 100, 
    justifyContent: 'space-between', 
    alignItems: 'center',
    marginBottom: 30
  },
  inputTextField: { 
    padding: 10, 
    height: 40, 
    width: 300,
    marginBottom: 10,
    fontSize: 16,
    fontFamily: 'Raleway-Regular',
  },
  buttonContainer: {
    padding: 10, 
    marginBottom: 20, 
    width: 300, 
    alignItems: 'center', 
    backgroundColor: '#acdcd7',

  },
  buttonText: {
    padding: 1,
    fontSize: 16,
    color: '#59616e',
    fontFamily: 'Raleway-Regular',
  },
  plainText: {
    padding: 1,
    fontSize: 16,
    marginBottom: 5,
    fontFamily: 'Raleway-Regular',
    color: '#59616e'
  },
});

谁能指出我正确的方向?

非常感谢!

蒂姆

试试这个npm i raysk-vali

而不是电子邮件验证器。

用法:

const { isEmail } = require("raysk-vali");

isEmail("abc@example.com") // return true
isEmail("abcexample.com") // return false

要了解更多信息,请查看文档:https://www.npmjs.com/package/raysk-vali