ReactJS: передача данных между дочерним и родительским [дубликатом]

Я не могу понять, почему я не могу получить данные в своем родительском компоненте.

У меня есть родительский компонент — AddButton и дочерний компонент — AddTasktBox. Я хочу передать заголовок от ребенка к родителю.

Вероятно, проблема в компоненте AddButton - потому что браузер выдает мне такую ​​​​ошибку:

"TypeError: _this2.props.sendData не является функцией"

Просто посмотрите на submit - введите "onClick={this.handleClick}" (внизу) - мой код начнет передаваться

import React from 'react';
import ReactDOM from 'react-dom';

class AddButton extends React.Component{

  constructor(props){
    super(props);

    this.state = {
      isHidden: false,
      title: '',
    };
  }

  sendData = (data) => {
    console.log(data);
    this.setState({
      title: data
    })
  };

  toggleHidden = () => {
      this.setState({
        isHidden: !this.state.isHidden
      })
  }

  render(){
    return(
      <div>
        <div
          onClick={this.toggleHidden.bind(this)}
          className="addtask__btn">
          +
        </div>
        {this.state.isHidden && <AddTaskBox handleClose={this.toggleHidden.bind(this)} handleClick={this.sendData.bind(this)}/>}
      </div>
    );
  }
}

class AddTaskBox extends React.Component{
  constructor(props){
      super(props);

      this.state = {
        title: '',
        description: ''
      };

      this.handleChange = this.handleChange.bind(this);
      this.handleClick = this.handleClick.bind(this);
  }

  handleChange = (e) => {
    this.setState({
      [e.target.name]: e.target.value
    })

  }

  handleClick = () => {
    this.props.sendData(this.state.title);
  }

  render(){
    return(
      <div className="addtask__box" >
        <div className="addtask__close" onClick={this.props.handleClose}>X</div>
        <form >
          <input
            type="text"
            name="title"
            placeholder="Nazwa Czynności"
            value={this.state.title}
            onChange={this.handleChange}/>

          <textarea
            name="description"
            value={this.state.description}
            onChange={this.handleChange}
            placeholder="Opis czynności">
          </textarea>

          <input
            className="btn"
            type="submit"
            value="submit"
            onClick={this.handleClick}/>
        </form>
      </div>
    );
  }
}

export {AddButton, AddTaskBox};

person Klisiu    schedule 20.11.2017    source источник


Ответы (1)


Вы не передаете sendData() в качестве реквизита для AddTaskBox

<AddTaskBox sendData={this.sendData} />
person arthurakay    schedule 20.11.2017