2017-01-28 4 views

답변

2

난 당신의 코드를 약간 리팩토링, 그리고 여기에 펜을 포크 : http://codepen.io/mrlew/pen/wgPjre

내가 CRE myItems 개의 배열을 상태로 변환합니다. 이는 allElementsselectedElements 소품을 기반으로 제작되었습니다. 당신의 생성자에서

:

const myItems = props.allElements.map((item) => { 
    return { 
    value: item, 
    checked: (props.selectedElements.indexOf(item) > -1) 
    } 
}) 

이 배열은 value 같이 checked 재산을 추적 각 항목의 운영 체제.

또한 을 추가하여 updateStateList을 콜백에 호출 할 수 있습니다 (여기에서 docs). 이 방법으로 this 컨텍스트를 설정하고 추가 매개 변수를 설정합니다. 이 경우 매우 유용합니다.

onClick={this.updateStateList.bind(this, item)} 

updateStateList 방법은 먼저 새로운 배열 새 (map)와 새로운 값으로 배열하고 setState를 만들기 :

updateStateList(selectedItem, e){ 
    let myNewItems = this.state.myItems.map((item) => { 
     if (item.value == selectedItem.value) item.checked = !selectedItem.checked 
     return item 
    }) 
    this.setState({myItems: myNewItems}) 
    } 

는 I는 다른 재료를 제거하는 자유했다.

희망이 있습니다.

참고 : 데이터 (thruth 두 가지 소스) desynchronize 때문에 부모 구성 요소 는, 결과에 대한 상관하지 않는 경우 초기 상태로 소품을 통과 만 권장 패턴 간주됩니다. "올바른"접근법은 일부 부모가 변형을 수행하도록하는 것이며 사용자의 체크 세트는 사용자 클릭 이벤트를 전달하고 이미 계산 된 배열 객체를 수신합니다.