2016-06-15 2 views
0

내가 가지고있는이 기능을 수행 반환 부분은 먼저 나머지

handleClickSuitClass(rankClass, suitClass) { 
    // first part I'd like to run AND return no matter what 
    const newState = update(this.state, { [rankClass]: { [suitClass]: { $set: !this.state[rankClass][suitClass] } } }); 
    this.setState(newState); 

    // second part I'd like to run after first part returned 
    const presetId = this.state.preset.current; 
    if (presetId !== '') { 
     updateSuitClass.call({ _id: presetId, rankClass, suitClass }, (err) => { 
     if (err) { 
      Bert.alert(err.reason, 'danger'); 
      const revertState = update(this.state, { [rankClass]: { [suitClass]: { $set: !this.state[rankClass][suitClass] } } }); 
      this.setState(revertState); 
     } 
     }); 
    } 
    } 

내가 처음 두 줄에 상관없이 (체크) 체크를 전환 상태에 setState를하는 것입니다 무엇을, 실행되지 할을 클릭 한 항목에 표시하십시오.

(첫 번째 부분이 반환 된 후) true이면 Meteor 유효성 검사 메소드를 호출하여 데이터베이스에서 선택된 항목을 업데이트합니다. 오류가 있으면 상태를 다시 토글하여 원래 상태로 되돌립니다.

현재 작동하지만 느립니다. 처음 두 줄을 먼저 실행하고 상태를 설정 한 다음 두 번째 부분을 단일 함수로 실행하도록하려면 어떻게해야합니까?

+0

을 되돌릴 동안 이유는 왜 돈이 이 두 개의 분리 된 기능을 만들고 싶지 않습니까? 의심 스럽다면, 피할 수없는 경우를 제외하고는 하나의 작업 단위를 수행하도록 기능을 제한하십시오. –

+0

인수/매개 변수가있는 클릭 이벤트에서 두 개의 함수로 나누는 방법은 무엇입니까? onClick은 다음과 같습니다. onClick = {props.onClick.bind (null, props.presetObj)} – cocacrave

답변

1

setState()콜백을 두 번째 매개 변수로 사용합니다. React's documentation에서 :

제 (선택적) 매개 변수는 setState를 완료하고 성분이 다시 렌더링되면 실행될 콜백 함수이다.

그래서 당신은 할 수 있습니다 :

this.setState(newState, function() { 
    // Code to be executed after... 
}); 
+0

도움을 주셔서 감사합니다. 스레드에서 요청한 내용 이었기 때문에 답변을 수락합니다. "느려짐"에 대한 실제 문제가 무엇인지보십시오. 'updateSuitClass.call'이 다음 클릭 이벤트를 차단했기 때문입니다. 차단 해제 방법을 알아 내면됩니다. – cocacrave

+0

도와 드리겠습니다. ;) – typologist

0

코드는 간단하게 할 수 다음과 같이

const suitState = this.state.rankClass.suitClass; 
this.setState({ 'rankClass.suitClass' : !suitState }); 

나중에

this.setState({ 'rankClass.suitClass' : suitState });