2017-12-21 20 views
1

나는 다음과 같은 인터페이스가 있습니다액세스 용기 소품

interface EditUserContainerProps 
    extends RouteComponentProps<EditUserParams>, 
    EditUserStateProps, 
    EditUserDispatchProps { } 

interface EditUserParams { 
    id: number; 
    history: any; 
} 

interface EditUserStateProps { 
    isLoading: boolean; 
    isSubmitting: boolean; 
    userFields: UserField[]; 
    User: User; 
} 

interface EditUserDispatchProps { 
    load: (id: number) => void; 
    updateUser: (User: User) => any; 
    parseFile: (file: File, replace: boolean) => any; 
    addRecords: (records: any[]) => any; 
} 

그리고 나는 mapDispatchToProps 기능은 다음과 같습니다, ownProps는에 을 통과 소품 parseFile에 대한 콜백에서

입니다 내 컨테이너. 나는 소품addRecords을 포함하는 컨테이너의 에 액세스해야합니다.

어떻게 mapDispatchToProps 컨테이너 소품에 액세스 할 수 있습니다?

+1

나는 당신이 당신이 그것을 사용하는 ownProps에 액세스 할 수 있습니다, 당신이 요구하는 것을 이해하지 않습니다. 컨테이너의 소품은 뭐지? 그냥 소유물이 아니야? – Dakota

+0

구성 요소 계층 구조가 어떻게 보이는지 보여 줄 수 있습니까? 즉,'render' 함수는 무엇입니까? –

+0

언급 @Dakota으로,'내 컨테이너로 전달에만 소품 (내 경우에는 없음) ownProps' 있습니다. 내 컨테이너가 생성하고 매핑 한 소품을 원합니다. – im1dermike

답변

0

당신은 아마 상호 작용이 유형의 mergeProps를 사용해야합니다. 그것은 당신의 컨테이너에 대한 모든 소품에 액세스 할 수 있습니다. addRecords가 dispatchProps에 있습니다. 그래서 거기에서 액세스 할 수 있습니다. 문서에서

const mergeProps = (stateProps, dispatchProps, ownProps) => { 
    const props = Object.assign({}, ownProps, stateProps, dispatchProps) 
    props.parseFile = (file: File, replace: boolean) => { 
     return fileParsingsApiActions 
     .parseFile(file)(dispatch) 
     .then((data: any) => { 
      dispatchProps.addRecords(data.data); 
     }) 
    } 

    return props; 
} 

: [mergeProps(stateProps, dispatchProps, ownProps): props] (기능) : 지정된 경우, mapStateToProps(), mapDispatchToProps(), 부모 소품의 결과를 전달됩니다. 사용자가 반환 한 일반 객체는 줄 바꿈 된 구성 요소에 소품으로 전달됩니다. 이 함수를 지정하여 소품을 기반으로 한 상태 조각을 선택하거나 작업 작성자를 소품의 특정 변수에 바인딩 할 수 있습니다. 이를 생략하면 기본적으로 Object.assign({}, ownProps, stateProps, dispatchProps)이 사용됩니다.

+0

고마워요. 나는 이것을 조사 할 것이다. 나는 그것을 전에 들여다 보았고 정직하게 사용하는 방법을 조금 혼란스럽게 보였다. 당신이 다음 mapStateToProps' 및/또는'mapDispatchToProps'과'정의했다처럼'mergeProps'가 어떤 방법을 알고있는 사람의 두 가지를 결합 보였다. – im1dermike

+0

Nah 당신은 세 가지 물건, 주 소품, 파견 소품 및 소도구를 얻을 수 있습니다. 이 과제를저기서하면 괜찮을거야. 함수에서 전체 소품 객체를 빌드해야합니다. – Dakota

+0

그래서'parseFile' 디스패치 액션을 어디에 정의해야합니까? – im1dermike