Предположим, что код (дочерний компонент под названием «Ответы») генерирует динамически 3 divs (на основе сопоставленного набора данных), и каждый div содержит текстовое поле и кнопку отправки.Динамическая связка ReactJS
Если пользователь вводит что-то во второе текстовое поле и нажимает кнопку отправки, как мне сохранить надлежащее связывание (захватить текст из второго текстового поля) в обработчике buttonSubmit (находится в родительском компоненте)?
Предположим, что моя цель - увидеть правильный текст в сообщении (комментарий) в buttonSubmit handler ... как я могу это сделать? Благодаря !
var Parent = React.createClass({
buttonSubmit: function(e){
e.preventDefault();
var comment = $(this).closest('.answer-container').find('.answer-textArea').val(); // get comment text
alert(comment);
},
render: function(){
return (
<div>
<Answers data={this.state.answers} onButtonSubmit={this.buttonSubmit} />
</div>
);
}
});
var Answers = React.createClass({
\t render: function(){ \t \t
var self = this;
var answerNodes = this.props.data.map(function(answer){
\t \t \t return (
\t \t <div className="answer-container">
<div className="answer-comment">
<textarea className="answer-textArea" placeholder="Comment must be more than 5 words ..."></textarea>
</div>
<div className="answer-rateIt">
<input data-id={answer.AnswerID} type="number" className="rating" />
<br /><br />
<button id={answer.AnswerID} className="buttonSubmit" onClick={self.props.onButtonSubmit} >Submit</button>
</div>
</div>
\t \t \t);
\t \t });
\t \t return(
\t \t \t <div>
\t \t \t \t {answerNodes}
\t \t \t </div>
\t \t);
\t }
});
Почему не существует 'Answers', чтобы создать компонент' Ответ', чтобы обработать событие? Каждый из них может поднять событие родителям по мере необходимости. – WiredPrairie