2016-04-28 3 views
1

Я хотел бы добавить реактивный маршрутизатор. Ссылка на событие для нажатия клавиши в форме, которую я создаю. Сама форма выглядит следующим образом:Добавление ссылки на событие для нажатия клавиши

<div className="col-md-6 col-md-offset-3" onKeyPress={e => this._handleKeyPress(e)}> 
    <Paper style={styles.form}> 
     <form role="form"> 
      <div className="text-center"> 
       <h2>Enter Your Details to Login</h2> 
       <div className="col-md-12"> 
        <TextField 
         hintText="Email" 
         floatingLabelText="Email" 
         type="email" 
         errorText={this.state.email_error_text} 
         onChange={e => this.changeValue(e, 'email')} 
         onBlur={this.isDisabled} 
        /> 
       </div> 
       <div className="col-md-12"> 
        <TextField 
         hintText="Password" 
         floatingLabelText="Password" 
         type="password" 
         errorText={this.state.password_error_text} 
         onChange={e => this.changeValue(e, 'password')} 
         onBlur={this.isDisabled} 
        /> 
       </div> 
       <FlatButton 
        containerElement={<Link to="/portal" />} 
        disabled={this.state.disabled} 
        style={{"marginTop": 50}} 
        label="Submit" 
        onClick={e => this.login(e)} 
       /> 
      </div> 
     </form> 
    </Paper> 
</div> 

Как вы можете видеть, что я делаю кнопку материал-щ ссылку на следующую страницу. Тем не менее, я также хотел бы сделать что-то подобное при нажатии клавиши ввода для отправки формы. На данный момент у меня есть это, чтобы справиться с ключевым событием и логин:

_handleKeyPress(e) { 
    if (e.key === 'Enter') { 
     if (!this.state.disabled) { 
      this.login(e); 
     } 
    } 
} 

login(e) { 
    createUser(this.state.email, this.state.password); 
} 

Но, как вы можете видеть, что нет перехода происходит в ключевой пресс-функции.

Мой вопрос в том, как я могу добавить это к событию нажатия клавиши, чтобы он также вызвал переход на следующую страницу?

Любая помощь будет очень оценена, как всегда.

Спасибо за ваше время

+0

Вы пытались добавить маршрутизатор в свой контекст компонента и использовать this.context.router.push ('yourpath')? – QoP

+0

Как бы я это делал, я только начинаю использовать реактивный маршрутизатор, поэтому я немного смущен тем, что вы подразумеваете под этим. – BeeNag

ответ

1

Это должно работать

YourComponent.contextTypes = { 
    router: React.PropTypes.object 
}; 


login(e) { 
    createUser(this.state.email, this.state.password); 
    this.context.router.push('yourURL'); 
} 

Если вы используете маршрутизатор Реагировать 2.0.0+ и импортирован browserHistory от среагировать-маршрутизатора в качестве истории маршрутизатора вы можете использовать это, а также

import { browserHistory } from 'react-router' 

login(e) { 
    createUser(this.state.email, this.state.password); 
    browserHistory.push('yourURL'); 
} 
+0

Это отлично работает для нажатия кнопки, но, к сожалению, до сих пор нет любви к ключевому событию. Похоже, что мероприятие все еще не стреляет вообще. Вы считаете, что есть проблема в том, как я это называю? – BeeNag

+0

hm ... событие не срабатывает, потому что div не имеет фокуса, вы можете попытаться связать его в окне на компонентеDidMount и отвязать его с помощью componentWillUnmount. – QoP

+0

После привязки к событию окна добавляется, но все еще не срабатывает ... – BeeNag