Из исследований я вижу, что thunk - это инструмент, который вы используете, чтобы иметь возможность связывать действия вместе и / или иметь дело с обратными вызовами, асинхронными действиями и побочными эффектами.
У меня проблемыпонимание руководства thunk middleware .Они постоянно ссылаются на «store.dispatch» (как и большинство учебных пособий по redux), но я никогда не вызываю dispatch и никогда не имею доступа к store, поэтому я не уверен, как реализовать все, что они предлагают.(Я предполагаю, что это потому, что я использую mapDispatchToProps в реагировать .... что не является опцией в моих файлах создателей действий)
Ниже представлен мой создатель действий (часть кода удалена для ясности):
import { CREATE_NEW_SAMPLING_EVENT } from '../Constants/ActionTypes';
import { emptySamplingEvent } from '../Constants/SamplingEvent';
import _ from 'lodash';
import uuidv4 from 'uuid';
export function createNewSamplingEvent(eventName) {
let newEvent = _.cloneDeep(emptySamplingEvent);
newEvent.eventID = uuidv4();
newEvent.eventName = eventName;
newEvent.dateModified = new Date();
//TODO: call an optional callback
//TODO: dispatch eventLinkTable event
return { type: CREATE_NEW_SAMPLING_EVENT, event: newEvent }
}
То, что я хотел бы сделать, перечислено в 'todo's.
У меня есть другое действие, называемое EVENT_LINK_TABLE в другом файле создателя действия и другом редукторе, которое бы взяло uuid от этого создателя действияв качестве аргумента.Я хотел бы отправить это действие EVENT_LINK_TABLE (с помощью uuid), как только я закончу делать это новое событие.
Далее, я хотел бы вызвать стандартный обратный вызов (который на самом деле будет отправлятьдругое действие - LOAD_SAMPLNG_EVENT) .. но я не уверен, как вызвать обратный вызов и вернуть действие.Я также слышу, что делать это от создателя действия - это плохая практика, и я не хочу, чтобы это произошло, если в процессе создания произойдет сбой.
Чтобы добавить дополнительную информацию, я отправляю действие в код реагирования: \
handleBrandNewButtonClick = () => {
this.props.createNewSamplingEvent(this.state.newSamplingEventName);
}
Этот компонент подключен следующим образом:
const mapStateToProps = function (state) {
return {
samplingEvents: state.SamplingEvents, //to get list of sampling events to check for uniqueness for that user
}
}
const mapDispatchToProps = {
createNewSamplingEvent,
}
export default withRouter(
withStyles(styles, { withTheme: true })
(connect(mapStateToProps, mapDispatchToProps)
(NewEventForm)
)
);