2016-07-21 3 views
0

Ich erstelle eine Komponente, die den Zustand mit Redux Architektur behandelt (ja, das ist wahrscheinlich per Definition schlecht, weil eine Komponente den Status an die App aber sowieso delegieren sollte).Wie erhalte ich den letzten Aktionstyp, der vom Geschäft selbst im Geschäft ausgelöst wird?

Diese Komponente akzeptiert verschiedene Requisiten. Mein Problem kommt, wenn ich einen Rückruf behandeln muss. Nehmen wir ein praktisches Beispiel, um dies besser darzustellen.

Nehmen wir an, wir brauchen eine Komponente wie <App onSubmit={() => {}} />.

Wir konnten Shop erstellen, wenn die Komponente bekommt montieren, so werden alle inneren Komponenten können Aktionen versenden/abonnieren Änderungen/etc.

Der Versuch könnte sein, eine Aktion namens submit() zu haben. Auf diese Weise der Speicher wird wissen, dass es eine Änderung so jeder Abonnent anzuwenden wissen und jemand wird diese onSubmit Rückruf nennen.

So würde der Code wie folgt aussehen:

class App extends Component { 
    constructor (props) { 
    super(props) 
    this.subscriber = this.subscriber.bind(this) 
    } 
    componentWillMount() { 
    this.store = createStore() 
    this.store.subscribe(this.subscriber) 
    } 
    subscriber (action) { 
    if (action.type === 'submit') 
     this.props.onSubmit() 
    } 
    render() { 
    return (
     <Provider store={this.store}> 
     <FooComponent /> 
     </Provider> 
    ) 
    } 
} 

Das Problem, dass, obwohl subscriber auf versandt jede Aktion aufgerufen wird, wissen Teilnehmer kann nicht das, was die letzte Aktion geschickt war. Es gibt also keine Möglichkeit zu wissen, wann Sie anrufen sollen: onSubmit.

  • Wie können wir subscriber verwenden, um Änderungen im Geschäft zu erfahren?
  • Sollte ich aufhören, eine Redux-Architektur hier zu versuchen?

Antwort

4

Dies ist ein Anti-Pattern in Redux.

Es gibt keine "letzte Aktion", da Redux sich das Recht vorbehält, Sie bei mehreren verschachtelten Versendungen nur einmal zu benachrichtigen.

Stattdessen sollten Sie den lokalen Nebeneffekt zusammen mit der Aktion ausführen. Redux Thunk ist ein beliebter Weg, dies zu tun. Wenn Sie mehr Entkopplung benötigen, können Sie stattdessen Redux Saga genießen.

+0

Ich meinte nicht "die letzte Aktion" als das. Ich möchte nur alle abgeordneten Aktionen bekommen, wie ich es in den Reduzierern mache. Der Punkt ist, dass es keine Zustandsänderung geben wird, wenn das passiert, ich möchte nur wissen, dass ein "Ereignis" ausgelöst wurde. – carlesba

Verwandte Themen