2017-06-29 28 views
0

我有一個表單的React組件,我需要做的是捕獲用戶名,然後使用sessionstorage保存它。javascript React表單onsubmit保存提交的用戶名

這是我目前正在嘗試,但它沒有保存它。

下面的代碼:

class Login extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     password: '', 
     redirect: false, 
    }; 

    this.onUsernameChange = this.onUsernameChange.bind(this); 
    this.onPasswordChange = this.onPasswordChange.bind(this); 
    } 

    onUsernameChange(event) { 
    this.setState({ username: event.target.value }); 
    } 

    onPasswordChange(event) { 
    this.setState({ password: event.target.value }); 
    } 

    handleSubmit() { 
    event.preventDefault(); 
    sessionStorage.setItem('username', this.username); 

    } 

    render() { 

    return (
     <div> 
      <form className="form-signin" onSubmit={this.handleSubmit}> 
      <input type="text" value={this.username} onChange={this.onUsernameChange} /> 
      <input type="password" value={this.password} onChange={this.onPasswordChange} /> 
      <input type="submit" value="Submit" /> 
      </form> 
     </div> 
    ); 
    } 
} 

export default Login; 

我怎樣才能得到這個工作?

+1

您沒有將事件傳遞給'handleSubmit'。它不應該是'handleSubmit(event)' –

回答

2

我想你只需要添加username的狀態,然後再傳遞到eventhandleSubmit

class Login extends Component { 
     constructor(props) { 
     super(props); 
     this.state = { 
      password: '', 
      redirect: false, 
      username: '' 
     }; 

    this.onUsernameChange = this.onUsernameChange.bind(this); 
    this.onPasswordChange = this.onPasswordChange.bind(this); 
    } 

    onUsernameChange(event) { 
    this.setState({ username: event.target.value }); 
    } 

    onPasswordChange(event) { 
    this.setState({ password: event.target.value }); 
    } 

    handleSubmit(event) { 
    event.preventDefault(); 
    sessionStorage.setItem('username', this.state.username); 

    } 

    render() { 

    return (
     <div> 
      <form className="form-signin" onSubmit={this.handleSubmit}> 
      <input type="text" value={this.username} onChange={this.onUsernameChange} /> 
      <input type="password" value={this.password} onChange={this.onPasswordChange} /> 
      <input type="submit" value="Submit" /> 
      </form> 
     </div> 
    ); 
    } 
} 

export default Login; 
1
handleSubmit(event) { 
    event.preventDefault(); 
    // sessionStorage.setItem('username', this.username); your code 
    sessionStorage.setItem('username', this.state.username); 
    } 

您已經使用了this.username用戶名。但是這裏沒有用戶名。 所以你從組件狀態獲取用戶名。

而你的方法沒有參數。如果你想要事件你把事件放在參數中。

+0

,但他甚至沒有初始狀態下的'username'。 –

+0

當然。但是當onUsernameChange方法調用時,用戶名狀態更新爲狀態。初始狀態僅用於初始化組件。您可以使用setState方法將額外的狀態添加到本地狀態。 – Vasi

+0

如果用戶嘗試提交而未在用戶名字段中鍵入任何內容,會發生什麼情況?這會創建一個我們可以用初始狀態處理的邊框嗎? –