LB777
@LB777

Как менять disabled у элемента в react.js?

На время получения данных хочу деактивировать кнопку "отправить", через атрибут тега disabled.
Делаю так:
var LogIn = React.createClass({
    getInitialState: function(){
        return {
            disabled: "enable";
        };
    },
    submitLogin: function() {
        ....
        $.ajax({
            ....
            beforeSend: function() {
                this.setState({
                    disabled: "disabled"
                });
            },
            ....
            complete: function (){
                this.setState({
                    disabled: "enable"
                });
            },
            ....
        })
        ....
    },
    render: function(){
        return(
            <form method="post" id="registration" className="message">
            ..........
                <p><input type="submit" value="Отправить" onClick={this.submitLogin} disabled={this.state.disabled} /></p>
            </form>
        );
    }
})

Но при рендеренги появляется только один атрибут disabled без значений и кнопка становиться не доступной.
Что делаю не так?
Как управлять в react.js атрибутом disabled?
И вообще как ими управлять?)))
  • Вопрос задан
  • 22956 просмотров
Пригласить эксперта
Ответы на вопрос 3
Laiff
@Laiff
Front-end developer
В React атрибут disabled принимает bool, то есть disabled={false} сделает элемент активным
Ответ написан
Комментировать
Ну собственно говоря вы делаете все нормально, вот убогий рабочий пример:
HTML:
<div class="container">
</div>

JS:
var Test = React.createClass({
  getInitialState: function() {
    return {disabled: true};
  },
  clickHandlers: function() {
    this.setState({disabled: false});
  },
  render: function() {
    return (
      <div>
          <button disabled={this.state.disabled}>Тест</button>
          <button onClick={this.clickHandlers}>Сменить</button>
      </div>
    );
  }
});
React.renderComponent(Test({}), document.querySelector(".container"));

А у вас у меня вызывают сомнения во эти строки:
beforeSend: function() {
                this.setState({
                    disabled: "disabled"
                });
            },
            ....
            complete: function (){
                this.setState({
                    disabled: "enable"
                });
            }

Сдается мне что this то у вас там представляет собой объект запроса и не имеет не чего общего с вашим контекстом исполнения. Надо как-то так:
submitLogin: function() {
        var that = this;
        ....
        $.ajax({
            ....
            beforeSend: function() {
                that.setState({
                    disabled: "disabled"
                });
            },
            ....
            complete: function (){
                that.setState({
                    disabled: "enable"
                });
            },
            ....
        })
        ....
    }
Ответ написан
Комментировать
@roman01la
Правильнее было бы вынести запрос в api модуль, а из компонента отправлять событие. Короче говоря — использовать Flux.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Else Ростов-на-Дону
от 150 000 до 200 000 ₽
OWNR SOLUTIONS Нижний Новгород
от 150 000 до 250 000 ₽