onSubmit反应多个项目

时间:2018-11-21 13:28:56

标签: reactjs

我有一系列数据,其中每个项目都有一个表格,提交后必须显示“已提交”文本,但是问题是,提交一个项目的表格后,显示所有项目。我希望当我提交表单时,应该显示受尊重项目中的div文本。我尝试在onSubmit事件中使用'index',并且当我在控制台中检查'for loop'的索引时,它会向我显示正确的索引,但是当我检查handleSubmitR =(e,DetailsRoom,index)=> {console.log(index)}的索引时,它与“ for循环”中的索引形式不同,并且将显示所有提交的文本。

     class App extends React.Component {
      constructor(props){
        super(props);
        this.state = {
          data: [],
          resultEdit:{},
                    };
                $.ajax({
                url:"/json.bc",
                type:"post",
                data:{
                    cityid:"[##cms.form.cityid##]",
                    fdate:"[##cms.form.fdate##]", 
                    tdate:"[##cms.form.tdate##]", 
                    userid:"[##db.userid.userid##]",
                },
                success:(result)=>{
                this.setState({data: eval(result)});
                }
                })

      }
      renderHotel(){
        return this.state.data.sort((a, b) => a.total - b.total).map((item,i)=>{
          return (
            <div class="items">
            {this.renderDetailsRoom(item,i)}
           </div>
          )
        })
      }

    renderDetailsRoom(DetailsRoom,i){
    let lenfamilies = DetailsRoom.families.length 
    var indents =[];
    for(var j = 0 ;j <lenfamilies;j++){
        var  index= i+j
        indents.push(<form method="post" key={index}  action={this.renderAction(DetailsRoom)}  onSubmit={e => this.handleSubmitR(e, DetailsRoom, index)}><div  class="Result">{this.state.resultEdit[index]}</div></form>)
    }
    return(
      indents
      )
    }

    handleSubmitR=(e, DetailsRoom, index)=>{
    console.log(index)
    e.preventDefault();
    return  this.setState( prevState => ({
    resultEdit: { ...prevState.resultEdit, [index]:'submitted'},
    })) }
   render() {
        return (
         <div>{this.renderHotel()}</div>);
      }

    }
 ReactDOM.render(<App/>, document.getElementById('Result'));

1 个答案:

答案 0 :(得分:0)

好像您的索引不是唯一的。

for(var j = 0 ; j<lenfamilies; j++) {
  var index= i+j
  ...
  }

i 来自地图,例如0,1,2 j 来自for循环,例如0,1,2,则 index 为0, 1 2 1 2 < / em>, 3 2 3 ,4