2017-05-11 13 views
0

문제 개요redux-thunk 작업에 전달할 수있는 데이터 유형은 무엇입니까?

I는 REDUX 형태를 사용하고 있으며 내를 compoent를 래핑하고, 등록 변화 형태를 변경하기위한 결합 기능()이다로 제공한다. 나는 이것을 actionCreator에서 호출하려고했다.

난 그냥 내 actionCreator 썽크에 전달할 수 있지만이 값이 작업의 파견에 제거되는 것 같다 생각

문제.

세부 내가 대신 바운드 행동을 내가 act.setFMEPATH라는 내 다른 actionCreators 중 하나에 대한 포인터를 보내는 대신 시도 변화을 보내는했지만 그 또한 작동하지 않습니다 그래서

.

아래 첫 번째 그림에서는 redux-action에 대한 dispatach가 발생하기 전의 변수 상태를 보여줍니다. 시계에서 볼 수 있듯이 act.setFMEPath가 명확하게 정의되어 있습니다.

두 번째 그림에는 입력 될 때의 동작 상태가 표시됩니다. defaultPath는 정의되어 있습니다 (스택의 클로저에 범위가 지정되어 있지만 storeAct입니다).

내 코드에서는 매개 변수 storeAct가 표시되지 않으므로 STORE.dispatch (Act.setFMEPath (filePath [0])를 하드 코딩하고 있지만 원하는 것은 STORE.dispatch (storeAct (filePath [0]))입니다.

나는 (그 일을하지 않을 수 있도록하지만,이 화살표 기능입니다 주) 파견 (에 첫 번째 매개 변수의 컨텍스트를 바인딩)와 바인딩 기능에 storeAct()를 돌려되어야합니다.

전화 전 상태 :

enter image description here

pickFile 액션 창조자의

주 항목

enter image description here

+0

질문에 답변을 드릴 수있을만큼 충분한 정보를 제공하지 못했습니다. pickFolder는 함수이므로 일반적으로 전달할 수있는 모든 것을 전달할 수 있습니다. 그것이 pickFolder에서 정의되지 않은 경우 호출자에서 정의되지 않았기 때문입니다. –

+0

@ 라디오 - 당신이 맞습니다. 내일 메인 인물에 대한 자세한 내용을 인라인으로 추가하겠습니다. 그러나 기본적으로 호출자에서 디스패치가 호출 될 때 디버거에서는 Act.setSourcePath가 함수에 바인딩되어 있음을 보여줍니다. 그러나 수신기 * (PickFolder 작업)에 들어가면 대상 매개 변수가 정의되지 않습니다. 그러나 defaultPath는 여전히 문자열입니다. 이것은 redux-thunk 버그입니까? –

+0

@ Radio- 필자는 더 자세한 내용을 기록했지만, 질문의 제목을 변경하여 새로운 메모를 작성한다는 사실을 깨닫지 못했습니다. 결과는 https://stackoverflow.com/questions/43895229/redux-dispatchtoprops-dispatch-loses-context-and-arguments-when-getting-to-act –

답변

0

그것은 redux는 javascript 객체를 계획하지 않은 것처럼 보입니다.위에서 보았 듯이, 바운드 함수 호출을 매개 변수로 가지는 actionCreator를 디스패치하려고 시도했을 때, actionCreator가 생성 될 때 이것이 빠져있었습니다.

함수 핸들 (바운드 함수)을 저장소에 배치하고 저장하지 않았으며 이전 값이 제거되었습니다 (자리 표시 자).

@ Radio-가 말하고있는 것에 당혹 스럽다. 왜냐하면 내가보고있는 것은 redux가 일반적인 자바 스크립트 객체가 아니라는 것이다 (디스패치 호출의 매개 변수 또는 감속기의 값으로 상점에 배치).

+0

에서 자세한 내용을 볼 수 있습니다. 디스패처는 객체의 함수를 제거합니다. 저장소 상태에 함수 참조를 저장하는 것은 좋지 않지만 그렇게 할 수는 없습니다. 함수 포인터 대신에 함수 호출의 결과를 저장하고 있습니까? 문제의 코드를 보지 않고서는 마음에 떠오르는 유일한 것입니다. –

+0

@ Radio- 만약 당신이 신경 쓰지 않는다면, 위의 업데이트 된 질문을보십시오. 그리고 나는 당신이 보았던 것을 볼 것이고, dispatch()에 전달 된 바운드 함수는 제거 될 것이라고 생각합니다. 또한 감속기를 사용하여 상점에 바운드 기능을 넣으려고 할 때도 똑같은 것을 볼 수 있습니다. 이 못생긴 일을하는 유일한 이유는 redux-form을 사용하여 제한을 피하는 것이 었습니다.이 메서드는 change()를 구성 요소의 로컬 바운드 함수로 제공하며 전역 적으로 사용할 수있게하려고했습니다. –

+0

내부 함수에 storeAct에 대한 참조가 없기 때문에 JavaScript 엔진이 이름을 유지하지 않기 때문에 입니다. 당신이 어딘가에 그것을 참조했다면, 엔진은 그 이름을 사용할 수있게 할 것이고, 다른 것일 수도 있습니다. –

0

pickFolder를 호출하는 코드 (즉, Act.pickFolder(Act.setSourcePath, defaultPath))은 redux-thunk과 전혀 관련이 없습니다. 그것은 redux-thunk이 작동하기 전에 평가 될 것이므로, 방법은 redux-thunk 일 것입니다. 전달 함수 값이고 그것이 경우가 redux-thunkdispatch, getStateextraArgument PARAMS과 함께 호출하면

redux-thunk 검사한다. 제발 check its source code, 정말 작고 간단합니다.

기본적으로 라디오가 말한 바를 정확히 의미합니다. 호출자에서 정의되지 않았기 때문에 pickFolder에서 정의되지 않은 경우입니다. 또한 pickFolderdestination의 용도가 표시되지 않기 때문에 오타를 확인하십시오.

+0

세부 정보를 확장 했으므로 https://stackoverflow.com/questions/43895229/redux-dispatchtoprops-dispatch-loses-context-and-arguments-when-getting-to-act –