我键入时Reactjs复制表单输入内容

时间:2019-01-22 10:39:53

标签: reactjs

Reactjs复制我输入的表单输入内容

此代码显示三种输入形式。 我的问题是,当我输入第一个输入表单时,我看到的输入内容也出现在第二个和第三个输入表单中。

请我如何分别在每个输入表单中保留键入内容。

import React, { Component, Fragment } from "react";
import { render } from "react-dom";


class AutoComment extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
comment: '',
      data: [],
      shown: true,


    };
 this.handleChangeComment = this.handleChangeComment.bind(this);
  }

  componentDidMount() {
    this.setState({
      data: [
        { id: "1", title: "my first title" },
        { id: "2", title: "my second title" },
        { id: "3", title: "my third title" }
      ]
    });
  }





 handleChangeComment(event) {
const { name, value } = event.target;
this.setState({ [event.target.name]: event.target.value });
  }

 handleComment(id, comments) {
   alert('am id:' +id);
alert('am id:' +comments);
    }


  render() {
    return (
      <div>
        <label>
          <ul>
            {this.state.data.map((post, i) => (
              <li key={i}>
{post.id}----{post.title}

<textarea rows="2" cols="20" className="form-control img-rounded"  name="comment"  value={this.state.comment} onChange={this.handleChangeComment} placeholder="Write a Comment..">Write Comment</textarea>

<input type="button" value="comment"   onClick={() => this.handleComment(post.id, this.state.comment)}  />
                <br />
              </li>
            ))}
          </ul>
        </label>
      </div>
    );
  }
} 

2 个答案:

答案 0 :(得分:0)

您已经创建了一个受控输入,但是,所有三个元素都引用相同的状态,因此,为什么要更改一个,就必须全部更改。

编辑:

这是一个代码示例:https://jsfiddle.net/yegac34n/

<textarea rows="2" cols="20" className="form-control img-rounded"  name={`comment-${i}`}  value={this.state[`comment-${i}`]} onChange={this.handleChangeComment} placeholder="Write a Comment..">Write Comment</textarea>

答案 1 :(得分:0)

这是因为所有文本区域的状态值都相同。你可以拥有

<textarea name={`comment${i}`}  value={this.state[`comment${i}`]}

或者您可以将状态变量comment作为数组,然后更新该数组的索引,该索引可以是

<textarea   value={this.state.comment[i]} onChange={(e) => handleChangeComment(e, i)}