Я всегда изо всех сил пытался разобраться с Redux-thunk, так как он действительно не понимает, какой великой цели он служит. Например, вот случайный пример Redux-Thunk, который я нашел на веб-сайте:
export const addTodo = ({ title, userId }) => {
return dispatch => {
dispatch(addTodoStarted());
axios
.post(ENDPOINT, {
title,
userId,
completed: false
})
.then(res => {
setTimeout(() => {
dispatch(addTodoSuccess(res.data));
}, 2500);
})
.catch(err => {
dispatch(addTodoFailure(err.message));
});
};
};
На первый взгляд это просто, addTodo - это функция, которая берет заголовок и userId и возвращает функцию с диспетчеризацией в качестве параметра, который затем использует диспетчеризацию один раз, а затем снова для ответа на запрос HTTP. Поскольку в этом случае используется Redux-Thunk, вы просто должны сделать dispatch(addTodo(x,x));
Почему бы мне просто не сделать что-то подобное?
function addTodo(dispatch, title,userId){
dispatch(addTodoStarted());
axios
.post(ENDPOINT, {
title,
userId,
completed: false
})
.then(res => {
setTimeout(() => {
dispatch(addTodoSuccess(res.data));
}, 2500);
})
.catch(err => {
dispatch(addTodoFailure(err.message));
});
}
Тогда из любого места я могу просто позвоните addTodo(dispatch, x, x);
Зачем мне использовать пример Redux-Thunk вместо моего собственного?