2017-06-03 25 views
0

私は同様の問題を調査し、.valueを追加しました。しかし、常にエラーが発生する:options.password must be a string、私はpassword.value.toString()をキャストします。アカウントベース:options.passwordは文字列でなければなりません

あなたは2つの文字列引数、オブジェクトを渡す必要はありません
import React, {Component} from 'react'; 
import ReactDom from 'react-dom'; 
import { Accounts } from 'meteor/accounts-base'; 

class Register extends Component { 

    constructor(props) { 
    super(props); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    handleSubmit (event){ 
    event.preventDefault(); 
    console.log(this.email.value); 
    console.log(this.password.value); 
    const res = Accounts.createUser(this.email.value, this.password.value.toString()); 
    console.log(res); 
    } 

    render() { 
    return (
     <form onSubmit={this.handleSubmit}> 
     <div className="form-group"> 
      <label htmlFor="email">Email:</label> 
      <input className="form-control" type="email" ref={(email) => this.email = email}/> 
     </div> 
     <div className="form-group"> 
      <label htmlFor="password">Password:</label> 
      <input className="form-control" type="password" ref={(password) => this.password = password}/> 
     </div> 
     <div className="form-group"> 
      <button type="submit" className="btn btn-primary">Submit</button> 
     </div> 
     </form> 
    ); 
    } 
} 

export default Register; 
+0

これはサーバー上のロジックに関連するエラーのようです。あなたは 'console.log(this.password.value);に何を得るのですか? ' – Panther

+0

私は正しいパスワードの値を得ることができ、もし私がtypeofを使うならば、それはまた文字列です – Han

答えて

1

const res = Accounts.createUser({ 
    email: this.email.value, 
    password: this.password.value, 
}); 

EDIT:あなたが状態を使用して、コンポーネントに反応についてcontrolled componentsがレフリーよりも良い習慣です:

import React, {Component} from 'react'; 
import ReactDom from 'react-dom'; 
import { Accounts } from 'meteor/accounts-base'; 

class Register extends Component { 

    constructor(props) { 
    super(props); 
    this.state = { 
     email: '', 
     password: '', 
    } 

    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    handleInputChange(event) { 
     const target = event.target; 
     const name = target.name; 

     this.setState({ 
     [name]: value, 
     }); 
    } 

    handleSubmit (event){ 
    event.preventDefault(); 
    const res = Accounts.createUser({ 
     email: this.state.email, 
     password: this.state.password, 
    }); 
    } 

    render() { 
    return (
     <form onSubmit={this.handleSubmit}> 
     <div className="form-group"> 
      <label htmlFor="email">Email:</label> 
      <input className="form-control" type="email" name="email" onChange={this.handleInputChange} /> 
     </div> 
     <div className="form-group"> 
      <label htmlFor="password">Password:</label> 
      <input className="form-control" type="password" name="password" onChange={this.handleInputChange} /> 
     </div> 
     <div className="form-group"> 
      <button type="submit" className="btn btn-primary">Submit</button> 
     </div> 
     </form> 
    ); 
    } 
} 
+0

ありがとう! – Han

+0

ところで、handleInputChange関数をバインドするのを忘れてしまったので、this.setStateは '[name]:target.value、' – Han

+0

にする必要があります。あなたの問題を解決してうれしいです。 :) –

関連する問題