Object(...)不是函数(反应+火力地堡)

时间:2018-06-21 04:02:16

标签: javascript reactjs firebase firebase-authentication

下面是我将在Join.js中调用的auth函数

import { firebaseAuth } from './firebase'

export function auth (email, pw) {
  return firebaseAuth().createUserWithEmailAndPassword(email, pw)
}

所以我的return语句出错,它说Object(...)不是函数。因此,在我的Join.js中,我创建了console.log,并没有为此this.email.value

定义
    handleSubmit = (e) => {
    e.preventDefault()
    console.log(`${this.email.value}`);
    auth(this.email.value, this.pw.value)
        .catch(e => this.setState(setErrorMsg(e)))

}

以下是我接受用户的表格

<Form size='large' onSubmit={this.handleSubmit}>
  <Form.Group>
    <label  >Username</label>
    <Input className="Name" ref={(username) => this.username = username} />
  </Form.Group>
  <Form.Group>
    <label>Password</label>
    <Input type="password" className="PW" ref={(pw) => this.pw = pw} />
  </Form.Group>
  <Form.Group>
    <label>Confirm Password</label>
    <Input type="password" className="JoinConfirmPW" />
  </Form.Group>
  <Form.Group>
    <label>Email Address</label>
    <Input className="JoinEmail" ref={(email) => this.email = email}/>
  </Form.Group>
  <Form.Group>
    <label>Gender</label>
    <Form.Select className="JoinGender" options={options} placeholder='Gender' ref={(gender) => this.gender = gender} />
    </Form.Group>
    <Button color='teal' className="submit">Sign Up</Button>
  </Form>

我不知道为什么我不确定。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

好像您的firebaseAuth()未定义。

您的firebase.js文件应该像

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/database';

...

const db = firebase.database();
const firebaseAuth = firebase.auth();

export {
  db,
  firebaseAuth,
};

和auth的使用方式一样,

 firebaseAuth.doCreateUserWithEmailAndPassword(email, passwordOne)
  .then(authUser => {

    // Create a user in your own accessible Firebase Database too
    db.doCreateUser(authUser.user.uid, username, email)
      .then(() => {
        this.setState(() => ({ ...INITIAL_STATE }));
        history.push(routes.HOME);
      })
      .catch(error => {
        this.setState(byPropKey('error', error));
      });

  })
  .catch(error => {
    this.setState(byPropKey('error', error));
  });

答案 1 :(得分:0)

您的代码中有2个错误。首先,不要将输入字段的值存储在局部变量中。而是使用state并使用this.setState()方法设置值。我知道这听起来很愚蠢,不应有太大的不同,但它消除了任何与范围相关的问题的可能性。

第二,您正在进行的Firebase调用无效。应该是firebase.auth().createUserWithEmailAndPassword(this.state.email, this.state.password);

提供状态变量中的值。其他使用适当的变量作为参数来传递电子邮件和密码。希望它能对我有用。