@Vlad171

Как получить значение(value) textarea дочернего компонента в родительском?

Есть следующее приложение:
import React from 'react'
import ReactDOM from 'react-dom'
const url="api-url";

class MessageItem extends React.Component {
    constructor(props) {
          super(props);
          this.state = {
             value:'',
          };
        };

     handleChange(event) {
            this.setState({value: event.target.value});
         }
    render() {
    return (
      <div className="message_wrap" key={this.props.message_id}>
                                    <div className="message_body">
                                           {this.props.message_body}
                                    </div>            
                                     <div className="input-field col s12">
                                         <textarea value={this.state.value} onChange={this.handleChange.bind(this)}/>
                                         <label htmlFor="textarea1">
                                             Ответ
                                         </label>
                                    <button onClick={this.props.onClick}>
                                        Отправить
                                    </button>
                            </div>
                        </div>
    );
  }
}
class Message extends React.Component {
       constructor(props) {
          super(props);
          this.state = {
             mes:[],
          };
        };
       componentDidMount(){
        fetch(url).then(function(response){
            return response
        }).then(function (response) {
            return response.json()
        }).then((data)=>{
            this.setState({mes:data})
        })
        }
        subFunction(user_id, value) {
       /*Здесь метод отправляет ответ с телом равным значению textarea */
        }
        render() {
            return (
                <div>
                {this.state.mes.map((index)=>
                    (
                        <MesItem
                                 key={index.message_id}
                                 message_body={index.message_body}
                                 onClick={this.subFunction.bind(this, index.user_id)}
                        />

                    )
              )
                }
            </div>
            );
        }
    }

ReactDOM.render(<Message/>, document.getElementById('container'));

Вкратце: нужно получить список сообщений от некоторого API - это происходит в компоненте Message через fetch по событию componentDidMount. Далее через map рендерится список сообщений через дочерний компонент MessageItem. В нем есть поле для ответа textarea. Значение его находится this.state.value. По факту нужно, чтобы при нажатии на кнопку Отправить можно было через функцию subFunction отослать ответ, передав ей id пользователя и значение ответа в textarea, затем сообщение должно быть удалено из массива mes. Если с передачей id проблем нет, то вот как передать value textarea, который находится в this.state.value MessageItem я не знаю. Получается, если я переношу subFunction в MessageItem, то теряю возможность изменить mes родительского Message(не могу удалить сообщение после ответа), если оставляю как есть - не могу получить значение textarea для ответа
  • Вопрос задан
  • 668 просмотров
Решения вопроса 1
@Vlad171 Автор вопроса
Отвечаю сам: в дочернем компоненте изменяем onClick={() => this.props.onClick(this.state.value)} и получаем в родительском компоненте в subFunction доступ к значению через value.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы