Я еще не специалист по thunk, но я могу сказать, что ваша функция serverCall должна возвращать функцию с параметром отправки ( см. Примеры здесь)
Вы должны отправитьдействие в этой подфункции (на самом деле, вызовите создателя действия, который переведет данные в состояние приложения.
Вам не нужно давать явное обещание, потому что fetch возвращает обещание.
Я попробую что-то вроде:
export const serverCall = (
url,
method,
body = undefined,
successMessage = undefined
) => {
// your code
return function (dispatch) {
return fetch(url, {
method: method,
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
...(body && { body: JSON.stringify(body) })
}).then(response => response.JSON())
.then(response =>
if (response.ok) {
if (successMessage) {
console.log(successMessage);
}
dispatch(fetchData(response))
} else {
index.js
<Button
onClick={() =>
this.props.serverCall(
"https://jsonplaceholder.typicode.com/users",
"GET"
)
>
Состояние должно быть удалено здесь, если вы используете Redux. Все берется из реквизита через mapDispatchToProps.
const mapDispatchToProps = dispatch => ({
onLogin: (username, password) => dispatch(login(username, password)),
ToggleIsLoginDialogOpen: IsLoginDialogOpen =>
dispatch(toggleIsLoginDialogOpen(IsLoginDialogOpen)),
serverCall: (url, method) => dispatch(serverCall(url, method))
});