import { CALLBACK_SEND, CALLBACK_LOADING, CALLBACK_ERROR, CALLBACK_SUCCESS } from './constants/actionTypes';
export const send = ({ name, phone }) => {
return async (dispatch) => {
try
{
dispatch(loading());
const result = await axios.post('/callback', { name, phone });
dispatch(success());
}
catch (e)
{
dispatch(error(e));
}
}
};
const loading = () => ({
type: CALLBACK_LOADING
});
const success = () => ({
type: CALLBACK_SUCCESS
});
const error = (message) => ({
type: CALLBACK_ERROR,
message: message
});
import { CALLBACK_SEND, CALLBACK_LOADING, CALLBACK_ERROR, CALLBACK_SUCCESS } from './constants/actionTypes';
const initialState = {
loading: false,
status: null,
message: null
}
export default (state = initialState, action) => {
switch (action.type)
{
case CALLBACK_LOADING:
return { ...state, loading: true };
case CALLBACK_SUCCESS:
return { ...state, status: 'OK' };
case CALLBACK_ERROR:
return { ...state, status: 'ERROR', message: action.message };
default:
return state;
}
}
{
type: 'BLA_BLA'
}
function qq() {
return {
type: 'BLA_BLA',
}
}
dispatch(qq())
// или
dispatch({
type: 'BLA_BLA',
})
export default (state = initialState, action) => {
switch (action.type)
{
case 'BLA_BLA':
// вот сюда придет javascript компилятор, так как вы попали в нужный кейс
// ибо выше указано - switch по типу экшена (action.type)
// ниже вы делаете что вам нужно с вашими данными
// конкретно в этом кейсе, вы берете все что было в state и изменяете loading на true
return { ...state, loading: true };
case CALLBACK_SUCCESS:
// сюда action с типом 'BLA_BLA' не попал
return { ...state, status: 'OK' };
case CALLBACK_ERROR:
// сюда тоже
return { ...state, status: 'ERROR', message: action.message };
default:
// и сюда
return state;
}
}
const loading = () => ({ ... });
const success = () => ({ ... });
const error = (message) => ({ ... });
export const send = ({ name, phone }) => { ... };
export const send = ({ name, phone }) => { ... };
function loading() {
return { ... };
};
function success() {
return { ... };
};
function error(message) {
return { ... };
};
loading, success, error
redux-actions
и redux-act
это уже вспомогательные библиотеки, как более лаконичный подход.