Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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 函数在调用时正常运行,但总是返回未定义的_Javascript_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 函数在调用时正常运行,但总是返回未定义的

Javascript 函数在调用时正常运行,但总是返回未定义的,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我目前正在使用react和firebase制作一个注册表单,我一直在通过检查firebase的用户列表来验证用户提供的用户名是否已被使用。以下是我的代码的简化版本: import React, { Component } from 'react'; import * as firebase from 'firebase'; const userList = [] class SignUpForm extends Component { constructor() {

我目前正在使用react和firebase制作一个注册表单,我一直在通过检查firebase的用户列表来验证用户提供的用户名是否已被使用。以下是我的代码的简化版本:

import React, { Component } from 'react';
import * as firebase from 'firebase';

const userList = []

class SignUpForm extends Component {
    constructor() {
        super();
        /*initialize my state*/
    }

    //get the user list from the database
    componentWillMount() {
        const users = database.ref('users')
        users.once('child_added', snapshot => {
          userList.push(snapshot.val())
        })
    }

    /*functions that get username from input and store into the state*/

    validateForm() {
        //in this.state, 'username' is the text input that the user entered
        const { username } = this.state

        //this is the function that checks if the username is already in use
        const findUsername = (username) => {
          userList.map(user => {
            if (user.username === username) {
              console.log("test")
              return true
            }
          })
        }

        //if username has been taken
        if (findUsername(username)) {
          console.log("found the same username in the database")
        }

        /*other validation checks*/
    }

    render() {
        return(
            <div>
                {/*input elements, etc*/}
                <button onClick={this.validateForm}
            </div>
        )
    }
}
import React,{Component}来自'React';
从“firebase”导入*作为firebase;
const userList=[]
类注册表单扩展组件{
构造函数(){
超级();
/*初始化我的状态*/
}
//从数据库中获取用户列表
组件willmount(){
const users=database.ref(“用户”)
一次('child_added',snapshot=>{
userList.push(snapshot.val())
})
}
/*从输入中获取用户名并存储到状态的函数*/
validateForm(){
//在此.state中,“username”是用户输入的文本输入
const{username}=this.state
//此函数用于检查用户名是否已在使用中
const findUsername=(用户名)=>{
userList.map(用户=>{
如果(user.username==用户名){
控制台日志(“测试”)
返回真值
}
})
}
//如果已使用用户名
如果(findUsername(用户名)){
log(“在数据库中找到相同的用户名”)
}
/*其他验证检查*/
}
render(){
返回(
{/*输入元素等*/}

您的
返回true
是从传递给
userList.map()
的匿名函数返回的,而不是从函数findUsername返回的。
userList.map()
不会从内部匿名函数传播该返回值

如果您想知道
userList
数组是否包含一些字符串,我完全不清楚您为什么要使用
map()
。在我看来,如果您想要一个布尔值来指示数组是否包含字符串,您应该改为使用:


您的
返回true
是从传递给
userList.map()
的匿名函数返回的,而不是从函数findUsername返回的。
userList.map()
不会从内部匿名函数传播该返回值

如果您想知道
userList
数组是否包含一些字符串,我完全不清楚您为什么要使用
map()
。在我看来,如果您想要一个布尔值来指示数组是否包含字符串,您应该改为使用:


由于函数不返回任何内容,因此控制台日志未定义。您在映射内返回true,但findUsername本身不返回任何内容。 要检查用户是否存在,只需执行此操作

const hasUser = userList.find(user => user.username === username);
if(!hasUser) {
  //no user present. you can proceed further.
}

由于函数不返回任何内容,因此控制台日志未定义。您在映射内返回true,但findUsername本身不返回任何内容。 要检查用户是否存在,只需执行此操作

const hasUser = userList.find(user => user.username === username);
if(!hasUser) {
  //no user present. you can proceed further.
}

感谢您的回答,情况确实如此!我使用了.map(),因为userList数组包含具有用户名、电子邮件、姓名、姓氏等属性的对象,我只想选择每个用户的用户名属性,所以我认为使用.map()将是解决方案感谢您的回答,情况确实如此!我使用了.map()由于userList数组包含一组具有用户名、电子邮件、姓名、姓氏等属性的对象,我只想选择每个用户的用户名属性,因此我认为使用.map()将是解决方案