ich Umsetzung lerne a/Redux reagieren und eine Anwendung mit zwei Hauptstücke Zustand haben:Reagieren/Redux, mehrere Aktionen mit Redux Thunk
- Eine Reihe von Elementen
- Ein Objekt, das vom Benutzer enthält angegebene Filter für diese Elemente
ich habe drei Funktionen/Aktionen, createFilter
, updateFilter
und deleteFilter
, die den Zustand # 2 ändern. Ich habe eine Aktion filterItems
, die # 1 basierend auf dem Status von # 2 ändert. Wenn sich also # 2 ändert, muss diese Aktion ausgelöst werden.
Dies ist die Komponente, mit denen ich arbeite:
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import { createFilter } from '../actions/actions'
import { updateFilter } from '../actions/actions'
import { deleteFilter } from '../actions/actions'
import { filterItems } from '../actions/actions'
class ItemList extends Component {
createFilter(input) {
this.props.createFilter(input)
this.props.filterItems()
}
updateFilter(input) {
this.props.updateFilter(input)
this.props.filterItems()
}
deleteFilter() {
this.props.deleteFilter()
this.props.filterItems()
}
...
// Render method
...
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({ createFilter, updateFilter, deleteFilter, filterItems }, dispatch)
}
function mapStateToProps({ itemList }) {
return { itemList }
}
export default connect(mapStateToProps, mapDispatchToProps)(ItemList)
Was ich habe festgestellt, dass, wenn einer der Filtermethoden gesendet wird, wird der Speicher (Stand # 2) die noch nicht von der Zeit aktualisiert filterItems()
wird genannt.
Also muss ich die Filterfunktionen asynchron ausführen, und sobald der Speicher aktualisiert wird, rufen Sie filterItems
.
Ich kämpfe auf, wie man das mit react-thunk
macht. Wenn die erste Funktion ein AJAX-Versprechen ist, würde ich .then()
verwenden:
export function updateFilterAndEvaluate(input) {
return (dispatch, getState) => {
updateFilter(input).then(dispatch(filterItems(getState().filters)))
}
}
Aber diese nur Funktionen sind, und keine .then() Methode habe. Ich versuche herauszufinden, was meine beste Vorgehensweise für diese Implementierung ist. Kann ich Redux-Aktionen in ein Versprechen einbinden? Benütze ich Thunk? Oder sollte ich ein ganz anderes Muster versuchen?
Warum sollte 'updateFilter' kein Versprechen geben? –