값이 재설정되지 않는 Reactjs에서 입력 필드 추가 및 제거

codegeek

안녕하세요 저는 네 가지 옵션이있는 React 애플리케이션에서 작업 중입니다. 사용자가 옵션을 선택하면 해당 입력 요소가 래퍼에 추가됩니다. 다음 코드에서는 추가 작업이 제대로 작동하지만 제거 작업이 제대로 작동하지 않습니다. 해당 element.Another 문제 요소 re-renders.so 전문가 나 acheive 방법을 나를 인도 할 때 존재하지 않는 입력 필드의 값이 삭제 버튼이 클릭되면 대응하는 행을 삭제 하고 , 컴퍼넌트 입력 값 재설정 안된다 다시 렌더링

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

var fields = "";
var options = ['one','two','three','four','five','six','seven','eight','nine','Ten','eleven','twelve'];

var SelectOptions = React.createClass({
    render:function(){
        var options = this.props.options;
        return (
             <select>
                   {options.map(function(col,index){
                       return (
                         <option key={index} value ={col}> {col} </option>
                       );
                   })}
             </select>
        );

    }
});

var PriceMultiply = React.createClass({
    render:function(){
        return (
           <tr>
             <td>
               Adjust Price Multiply
             </td>
             <td>
               Multiply <SelectOptions options={options} />
             </td>
             <td>
               by <input type="text" name="" />
             </td>
             <td>
               <button className="btn btn-danger" onClick={this.props.removeOperation} > Remove </button>
             </td>
           </tr>           
        );
    }
});

var PriceAdd = React.createClass({
    render:function(){
        return (
           <tr>
             <td>
               Adjust Price (Add)
             </td>
             <td>
               Add <input type="text" name="" />
             </td>
             <td>
               to <SelectOptions options={options} />
             </td>
             <td>
               <button className="btn btn-danger" onClick={this.props.removeOperation} > Remove </button>
             </td>
           </tr>           
        );
    }
});

var ExcludeProducts = React.createClass({
    render:function(){
        return (
           <tr>
             <td>
               Filter Products (Includes) 
             </td>
             <td>
               Exclude Products Where <SelectOptions options={options} />
             </td>
             <td>
              Includes  <input type="text" name="" />
             </td>
             <td>
               <button className="btn btn-danger" onClick={this.props.removeOperation} > Remove </button>
             </td>
          </tr>             
        );
    }
});

var IncludeProducts = React.createClass({
    render:function(){
        return (
           <tr>
             <td>
               Filter Products (Includes) 
             </td>
             <td>
               Exclude Products Where <SelectOptions options={options} />
             </td>
             <td>
              does not equals <input type="text" name="" />
             </td>
             <td>
               <button className="btn btn-danger" onClick={this.props.removeOperation} > Remove </button>
             </td>
          </tr>
        );
    }
});

var DynamicFields = React.createClass({
    getInitialState:function(){
       return {
          operations:[]
       }
    },
    removeOperation:function(index){
        var operations = this.state.operations;
        operations.splice(index,1);
        this.setState({operations:operations});
    },
    addOperation:function(){
         var value = this.refs.operationsDropDown.value;
         this.setState({operations:this.state.operations.concat([value])});
    },
    renderAdjustmentRows:function(){

       fields = this.state.operations.map((operation,index) =>{
              if(operation == "adjust-price-multiply"){
                    return (<PriceMultiply key={index} removeOperation={this.removeOperation} />);
              }else if(operation == "adjust-price-add"){
                     return (<PriceAdd key={index} removeOperation={this.removeOperation} />);
              }else if(operation == "filter-products-includes"){
                      return (<IncludeProducts key={index} removeOperation={this.removeOperation} />);
              }else if(operation == "filter-products-excludes"){
                      return (<ExcludeProducts key={index} removeOperation={this.removeOperation} />);
              }
        });

       return (
           <table>
             <tbody>
              {fields}
             </tbody>
           </table>
       );
    },
    render:function(){
        return (
          <div>
            <select className="browser-default" ref="operationsDropDown" id="operations-drop-down">
              <option value="adjust-price-multiply"> Adjust Price (Multiply) </option>
              <option value="adjust-price-add"> Adjust Price (Add) </option>
              <option value="filter-products-includes"> Filter products (Includes) </option>
              <option value="filter-products-excludes"> Filter products excludes </option>
            </select>
            <button onClick={this.addOperation} > Add Operation </button>
            <div id="adjust-import-data-rows">
                 {this.renderAdjustmentRows()}
            </div>
          </div>
        );
    }
});

ReactDOM.render(<DynamicFields />,document.getElementById('container'));
키 쇼어 바릭

문제는 removeOperation함수에 색인을 제공하지 않는다는 것입니다. 색인을 보내기 전에 구성 요소에 색인이 있어야합니다. 따라서 다음과 같이 index props를 사용하여 전달하십시오.

renderAdjustmentRows : function () {

   fields = this.state.operations.map((operation,index) =>{
          if(operation == "adjust-price-multiply"){
                return (<PriceMultiply key={index} index={index} removeOperation={this.removeOperation} />);
          }else if(operation == "adjust-price-add"){
                 return (<PriceAdd key={index} index={index} removeOperation={this.removeOperation} />);
          }else if(operation == "filter-products-includes"){
                  return (<IncludeProducts key={index} index={index} removeOperation={this.removeOperation} />);
          }else if(operation == "filter-products-excludes"){
                  return (<ExcludeProducts key={index} index={index} removeOperation={this.removeOperation} />);
          }
    });

그리고 각 동적 구성 요소의 제거 버튼 클릭에서 색인 소품을 보냅니다. 이를 위해 모든 제거 버튼을

 <button className="btn btn-danger" onClick={this.props.removeOperation.bind(null, this.props.index)} > Remove </button>

그리고 원하는 것을 얻을 수 있습니다.

전체 코드는 https://jsfiddle.net/KishoreBarik/f8h3c82m/ 에서 확인할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

해당 입력 필드에 합계 값 추가 및 설정

분류에서Dev

입력 필드 추가 및 제거

분류에서Dev

jquery를 사용하는 chrome 및 safari에서 HTML 입력 필드 값 설정 기가 제대로 작동하지 않음

분류에서Dev

입력 필드에 텍스트 힌트 제거 및 추가

분류에서Dev

양식 요소에서 재설정 메소드를 실행할 때 숨겨진 필드가 재설정되지 않는 이유는 무엇입니까?

분류에서Dev

입력 필드 추가 / 제거 수정

분류에서Dev

여러 HTML 입력 필드에서 이미지를 추가하거나 제거 할 수 없습니다.

분류에서Dev

Laravel 입력 필드 추가 / 제거 업데이트 값 문제

분류에서Dev

입력 필드에 값이 표시되지 않음 + 텍스트 정렬 문제

분류에서Dev

입력 필드가 Chrome에서 제대로 표시되지 않는 이유는 무엇입니까?

분류에서Dev

입력 필드 추가, 반복 및 div에 값 출력

분류에서Dev

이미지에 필드 (입력) 추가

분류에서Dev

PHP는 데이터베이스에 입력 필드 값 추가

분류에서Dev

입력 필드에 설정 값이 표시되지 않습니다.

분류에서Dev

AngularJS 표현식이 입력 값 필드에서 평가되지 않습니다.

분류에서Dev

입력 및 레이블 필드에 추가 정보를 의미 론적으로 마크 업하는 방법

분류에서Dev

Prestashop 삭제 된 이름 및 성 송장 주소 필드에서 "정의되지 않은"값을 제거하는 방법

분류에서Dev

방향 설정 .. 세로 및 가로 모드 모두에 대해 서로 다른 디자인 .. 입력 된 값을 재설정하지 않고

분류에서Dev

jquery로 입력 필드 추가 및 제거

분류에서Dev

제출 단추 및 재설정 단추가있는 JavaScript를 사용하여 양식에서 두 필드 계산

분류에서Dev

Jquery 복제 및 입력 값에 추가

분류에서Dev

많은 입력에서 값 추가 또는 제거

분류에서Dev

입력 필드 값에 Javascript 값이 표시되지 않음

분류에서Dev

MongoDB로 문서 업데이트, 필드 증가 및 존재하지 않는 경우 0으로 설정

분류에서Dev

각도 파이프 또는 지시문 : 파이프 또는 지시문에서 수정 된 값 대신 입력 필드의 실제 값 가져 오기

분류에서Dev

드롭 다운 값으로 추가되는 새 입력 필드

분류에서Dev

HTML 옵션 및 입력 필드가 제대로 표시되지 않음

분류에서Dev

입력 값에 따라 드롭 다운에서 옵션 추가 및 삭제

분류에서Dev

입력 테이블에서 행 추가 또는 제거

Related 관련 기사

  1. 1

    해당 입력 필드에 합계 값 추가 및 설정

  2. 2

    입력 필드 추가 및 제거

  3. 3

    jquery를 사용하는 chrome 및 safari에서 HTML 입력 필드 값 설정 기가 제대로 작동하지 않음

  4. 4

    입력 필드에 텍스트 힌트 제거 및 추가

  5. 5

    양식 요소에서 재설정 메소드를 실행할 때 숨겨진 필드가 재설정되지 않는 이유는 무엇입니까?

  6. 6

    입력 필드 추가 / 제거 수정

  7. 7

    여러 HTML 입력 필드에서 이미지를 추가하거나 제거 할 수 없습니다.

  8. 8

    Laravel 입력 필드 추가 / 제거 업데이트 값 문제

  9. 9

    입력 필드에 값이 표시되지 않음 + 텍스트 정렬 문제

  10. 10

    입력 필드가 Chrome에서 제대로 표시되지 않는 이유는 무엇입니까?

  11. 11

    입력 필드 추가, 반복 및 div에 값 출력

  12. 12

    이미지에 필드 (입력) 추가

  13. 13

    PHP는 데이터베이스에 입력 필드 값 추가

  14. 14

    입력 필드에 설정 값이 표시되지 않습니다.

  15. 15

    AngularJS 표현식이 입력 값 필드에서 평가되지 않습니다.

  16. 16

    입력 및 레이블 필드에 추가 정보를 의미 론적으로 마크 업하는 방법

  17. 17

    Prestashop 삭제 된 이름 및 성 송장 주소 필드에서 "정의되지 않은"값을 제거하는 방법

  18. 18

    방향 설정 .. 세로 및 가로 모드 모두에 대해 서로 다른 디자인 .. 입력 된 값을 재설정하지 않고

  19. 19

    jquery로 입력 필드 추가 및 제거

  20. 20

    제출 단추 및 재설정 단추가있는 JavaScript를 사용하여 양식에서 두 필드 계산

  21. 21

    Jquery 복제 및 입력 값에 추가

  22. 22

    많은 입력에서 값 추가 또는 제거

  23. 23

    입력 필드 값에 Javascript 값이 표시되지 않음

  24. 24

    MongoDB로 문서 업데이트, 필드 증가 및 존재하지 않는 경우 0으로 설정

  25. 25

    각도 파이프 또는 지시문 : 파이프 또는 지시문에서 수정 된 값 대신 입력 필드의 실제 값 가져 오기

  26. 26

    드롭 다운 값으로 추가되는 새 입력 필드

  27. 27

    HTML 옵션 및 입력 필드가 제대로 표시되지 않음

  28. 28

    입력 값에 따라 드롭 다운에서 옵션 추가 및 삭제

  29. 29

    입력 테이블에서 행 추가 또는 제거

뜨겁다태그

보관