2017-12-21 7 views
1

Ich habe folgende Schnittstellen:Zugang Container Requisiten in mapDispatchToProps

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; 
} 

Und ich habe folgende mapDispatchToProps Funktion:

Im Rückruf für parseFile ist ownProps die in bestanden Requisiten mein Behälter. Ich brauche Zugriff auf die Requisiten der Container, die addRecords enthalten.

Wie kann ich Zugriff auf Container Requisiten in mapDispatchToProps bekommen?

+1

Ich verstehe nicht, was Sie fragen, Sie haben Zugriff auf eigeneProps, wo Sie es verwenden. Was sind die Requisiten des Containers, ist das nicht nur ownProps? – Dakota

+0

Können Sie zeigen, wie die Komponentenhierarchie aussieht? d.h. die Hauptfunktionen 'Rendern'? –

+0

@Dakota Wie gesagt, "eigeneProps" sind nur Requisiten in meinem Container (in meinem Fall keine). Ich möchte Requisiten, die mein Container erstellt und zugeordnet hat. – im1dermike

Antwort

0

Sie müssen wahrscheinlich mergeProps für diese Art einer Interaktion verwenden. Es hat Zugriff auf alle Requisiten für Ihren Container. Deine addRecords sind in deinem sendeprops enthalten, glaube ich, damit du von dort darauf zugreifen kannst.

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; 
} 

Aus der Dokumentation: [mergeProps(stateProps, dispatchProps, ownProps): props] (Funktion): Wenn angegeben, wird das Ergebnis der mapStateToProps() bestanden, mapDispatchToProps() und die Eltern Requisiten. Das einfache Objekt, das Sie zurückgeben, wird als Props an die umschlossene Komponente übergeben. Sie können diese Funktion angeben, um ein Stück des auf Requisiten basierenden Zustands auszuwählen oder um Aktions-Ersteller an eine bestimmte Variable aus Requisiten zu binden. Wenn Sie es weglassen, wird Object.assign({}, ownProps, stateProps, dispatchProps) standardmäßig verwendet.

+0

Danke. Ich werde das untersuchen. Ich hatte vorher schon einmal darüber nachgedacht und es schien ehrlich gesagt ein bisschen verwirrend, wie man es benutzt. Es sah so aus, als müssten Sie "mapStateToProps" und/oder "mapDispatchToProps" definieren und dann "mergeProps" die beiden kombinieren, wer weiß, wie. – im1dermike

+0

Nein, du bekommst nur drei Objekte, die Staatsrequisiten, die Requisiten und deine Requisiten. Mach einfach diese Aufgabe dort und es sollte dir gut gehen. Sie müssen jedoch Ihr gesamtes Requisitenobjekt in der Funktion erstellen. – Dakota

+0

Wo definiere ich meine 'parseFile'-Dispatch-Aktion? – im1dermike

Verwandte Themen