0

Есть компонента с формой. Инпут я вынес в отдельную компоненту и подставляю. Код основной компоненты:

class Calendar extends React.Component {
      constructor() {
        super();
        this.state = {
                       id: '',
                       title: '',
                       date: ''
        };
        this.handleChange.bind(this);
        this.createEvent.bind(this)
      }

      handleChange(event) {
        var state = this.state;
        state[event.target.name] = event.target.value
        this.setState(state);
      }

      render() {
      console.log(this.state);
           return (
           <div className="container">
                  <div className="col-md-12 col-xs-12 calendar-wrapper">
                    <EventList/>
                    <Input name="id"
                           value={this.state.id}
                           onChange={this.handleChange}
                    />
                    <Input name="title"
                           value={this.state.title}
                           onChange={this.handleChange}
                    />
                    <Input name="date"
                           value={this.state.date}
                           onChange={this.handleChange}
                    />
                    <button className="btn btn-info text-center"
                           onClick={this.createEvent}
                    >
                        SAVE
                    </button>
                  </div>
           </div>
           );
      }
}

код компоненты Input:

export default class Input extends React.Component {
      constructor(props) {
        super(props);
        this.onChange.bind(this);
      }

      onChange(event) {
        this.props.onChange(event);
      }

      render() {
           return (
                <div className="form-group">
                  <label>{this.props.name ? this.props.name : ''}</label>
                  <input type="text"
                         className="form-control"
                         name={this.props.name}
                         value={this.props.value}
                         onChange={this.onChange}
                         />
                </div>
           );
      }
}

Все отрисовывается, когда начинаю вводить что-то в инпуты, текст вводится.но вылезает ошибка:

Uncaught TypeError: Cannot read property 'props' of undefined

В чем ошибка?вроде пробросил метод правильно..

Iga
  • 1,891
  • потому что ты не присвоил результат функции bind чему-нибудь – Grundy Jun 08 '17 at 08:56
  • Посмотри в вопросе по ссылке примеры того, как работать с bind и другие способы сохранения контекста вызова – Grundy Jun 08 '17 at 08:57
  • @Grundy Немного не понял.какой результат?у меня handleChange ведь не делает return.она только меняет state,но не возвращает его – Iga Jun 08 '17 at 09:09
  • все понял,что имелось в виду. в конструкторе поправил на this.handleChange = this.handleChange.bind(this); спасибо – Iga Jun 08 '17 at 09:13
  • 1
    Функция bind - возвращает обертку для указанной функции с нужным контекстом. Сама функция при этом не изменяется. В прошлом вопросе тебе, кстати, дали пример как использовать эту функцию. Плюс, все-таки посмотри вопрос про потерю контекста вызова, ссылку на который я дал выше – Grundy Jun 08 '17 at 09:13
  • хорошо.большое спасибо – Iga Jun 08 '17 at 09:21

0 Answers0