Redux: рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдЬреБрд▓ре░ 2015  ┬╖  115рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: reduxjs/redux

рдореИрдВ рдПрдХ рд▓реЙрдЧрд┐рди рд╕рдлрд▓рддрд╛ / рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореЗрд░реА рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рддрд░реНрдХ рдХреЛ рдХрд╣рд╛рдВ рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ actions -> reducer (switch case with action calling API) -> success/error on response triggering another action рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд░реАрдбреНрдпреВрд╕рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ?

рдХрдо рдХрд░рдиреЗ

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';
import Immutable from 'immutable';
import LoginApiCall from '../utils/login-request';

const initialState = new Immutable.Map({
  email: '',
  password: '',
}).asMutable();

export default function user(state = initialState, action) {
  switch (action.type) {
    case LOGIN_ATTEMPT:
      console.log(action.user);
      LoginApiCall.login(action.user);
      return state;
    case LOGGED_FAILED:
      console.log('failed from reducer');
      return state;
    case LOGGED_SUCCESSFULLY:
      console.log('success', action);
      console.log('success from reducer');
      break;
    default:
      return state;
  }
}

рдХрд╛рд░реНрд░рд╡рд╛рдИ

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';

export function loginError(error) {
  return dispatch => {
    dispatch({ error, type: LOGGED_FAILED });
  };
}

/*
 * Should add the route like parameter in this method
*/
export function loginSuccess(response) {
  return dispatch => {
    dispatch({ response, type: LOGGED_SUCCESSFULLY });
    // router.transitionTo('/dashboard'); // will fire CHANGE_ROUTE in its change handler
  };
}

export function loginRequest(email, password) {
  const user = {email: email, password: password};
  return dispatch => {
    dispatch({ user, type: LOGIN_ATTEMPT });
  };
}

рдПрдкреАрдЖрдИ рдХреЙрд▓

 // Use there fetch polyfill
 // The main idea is create a helper in order to handle success/error status
import * as LoginActions from '../actions/LoginActions';

const LoginApiCall = {
  login(userData) {
    fetch('http://localhost/login', {
      method: 'post',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        email: userData.email,
        password: userData.password,
      }),
    })
    .then(response => {
      if (response.status >= 200 && response.status < 300) {
        console.log(response);
        LoginActions.loginSuccess(response);
      } else {
        const error = new Error(response.statusText);
        error.response = response;
        LoginActions.loginError();
        throw error;
      }
    })
    .catch(error => { console.log('request failed', error); });
  },
};

export default LoginApiCall;

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрдВрдд рдореЗрдВ, рдЖрдк рд▓реЙрдЧ рдЗрди рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдХрд╣рд╛рдВ рд░рдЦрддреЗ рд╣реИрдВ?

рдпрд╣ рдареАрдХ рд╡рд╣реА рд╣реИ рдЬреЛ dispatch => {} рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рджреБрд╖реНрдкреНрд░рднрд╛рд╡!

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИред рдЗрд╕реЗ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВ:

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';

export function loginError(error) {
  return { error, type: LOGGED_FAILED };
}

export function loginSuccess(response) {
  return dispatch => {
    dispatch({ response, type: LOGGED_SUCCESSFULLY });
    router.transitionTo('/dashboard');
  };
}

export function loginRequest(email, password) {
  const user = {email: email, password: password};
  return { user, type: LOGIN_ATTEMPT };
}

export function login(userData) {
  return dispatch =>
    fetch('http://localhost/login', {
      method: 'post',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        email: userData.email,
        password: userData.password,
      }),
    })
    .then(response => {
      if (response.status >= 200 && response.status < 300) {
        console.log(response);
        dispatch(loginSuccess(response));
      } else {
        const error = new Error(response.statusText);
        error.response = response;
        dispatch(loginError(error));
        throw error;
      }
    })
    .catch(error => { console.log('request failed', error); });
}

рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ, рдмрд╕ рдХреЙрд▓ рдХрд░реЗрдВ

this.props.login(); // assuming it was bound with bindActionCreators before

// --or--

this.props.dispatch(login()); // assuming you only have dispatch from Connector

рд╕рднреА 115 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╢реБрджреНрдз рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ_ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗрд╡рд▓ рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ _what_ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

// CounterActions
export function increment() {
  return { type: INCREMENT }
}


// Some other file
import { increment } from './CounterActions';
store.dispatch(increment()); <--- This will work assuming you have a reference to the Store
increment(); <---- THIS DOESN'T DO ANYTHING! You're just calling your function and ignoring result.


// SomeComponent
import { increment } from './CounterActions';

@connect(state => state.counter) // will inject store's dispatch into props
class SomeComponent {
  render() {
    return <OtherComponent {...bindActionCreators(CounterActions, this.props.dispatch)} />
  }
}


// OtherComponent
class OtherComponent {
  handleClick() {
    // this is correct:
    this.props.increment(); // <---- it was bound to dispatch in SomeComponent

    // THIS DOESN'T DO ANYTHING:
    CounterActions.increment(); // <---- it's just your functions as is! it's not bound to the Store.
  }
}

рдЕрдм, рдЪрд▓реЛ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдкрдХреЛ async dispatch => {} рдлреЙрд░реНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ( loginError рдФрд░ loginRequest )ред

рдпрд╣:

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';

export function loginError(error) {
  return dispatch => {
    dispatch({ error, type: LOGGED_FAILED });
  };
}

export function loginSuccess(response) {
  return dispatch => {
    dispatch({ response, type: LOGGED_SUCCESSFULLY });
    // router.transitionTo('/dashboard');
  };
}

export function loginRequest(email, password) {
  const user = {email: email, password: password};
  return dispatch => {
    dispatch({ user, type: LOGIN_ATTEMPT });
  };
}

рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';

export function loginError(error) {
  return { error, type: LOGGED_FAILED };
}

// You'll have a side effect here so (dispatch) => {} form is a good idea
export function loginSuccess(response) {
  return dispatch => {
    dispatch({ response, type: LOGGED_SUCCESSFULLY });
    // router.transitionTo('/dashboard');
  };
}

export function loginRequest(email, password) {
  const user = {email: email, password: password};
  return { user, type: LOGIN_ATTEMPT };
}

рджреВрд╕рд░реЗ, рдЖрдкрдХреЗ reducers рдХреЛ _pure рдлрд╝рдВрдХреНрд╢рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ API рдХреЛ reducer рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рди рдХрд░реЗрдВред

рдпрд╣:

const initialState = new Immutable.Map({
  email: '',
  password: '',
  isLoggingIn: false,
  isLoggedIn: false,
  error: null
}).asMutable(); // <---------------------- why asMutable?

export default function user(state = initialState, action) {
  switch (action.type) {
    case LOGIN_ATTEMPT:
      console.log(action.user);
      LoginApiCall.login(action.user); // <------------------------ no side effects in reducers! :-(
      return state;
    case LOGGED_FAILED:
      console.log('failed from reducer');
      return state;
    case LOGGED_SUCCESSFULLY:
      console.log('success', action);
      console.log('success from reducer');
      break;
    default:
      return state;
  }

рд╢рд╛рдпрдж рдФрд░ рдЕрдзрд┐рдХ рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП

const initialState = new Immutable.Map({
  email: '',
  password: '',
  isLoggingIn: false,
  isLoggedIn: false,
  error: null
});

export default function user(state = initialState, action) {
  switch (action.type) {
    case LOGIN_ATTEMPT:
      return state.merge({
        isLoggingIn: true,
        isLoggedIn: false,
        email: action.email,
        password: action.password // Note you shouldn't store user's password in real apps
      });
    case LOGGED_FAILED:
      return state.merge({
        error: action.error,
        isLoggingIn: false,
        isLoggedIn: false
      });
    case LOGGED_SUCCESSFULLY:
      return state.merge({
        error: null,
        isLoggingIn: false,
        isLoggedIn: true
      });
      break;
    default:
      return state;
  }

рдЕрдВрдд рдореЗрдВ, рдЖрдк рд▓реЙрдЧ рдЗрди рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдХрд╣рд╛рдВ рд░рдЦрддреЗ рд╣реИрдВ?

рдпрд╣ рдареАрдХ рд╡рд╣реА рд╣реИ рдЬреЛ dispatch => {} рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣реИред рджреБрд╖реНрдкреНрд░рднрд╛рд╡!

рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИред рдЗрд╕реЗ рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВ:

import { LOGIN_ATTEMPT, LOGGED_FAILED, LOGGED_SUCCESSFULLY } from '../constants/LoginActionTypes';

export function loginError(error) {
  return { error, type: LOGGED_FAILED };
}

export function loginSuccess(response) {
  return dispatch => {
    dispatch({ response, type: LOGGED_SUCCESSFULLY });
    router.transitionTo('/dashboard');
  };
}

export function loginRequest(email, password) {
  const user = {email: email, password: password};
  return { user, type: LOGIN_ATTEMPT };
}

export function login(userData) {
  return dispatch =>
    fetch('http://localhost/login', {
      method: 'post',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        email: userData.email,
        password: userData.password,
      }),
    })
    .then(response => {
      if (response.status >= 200 && response.status < 300) {
        console.log(response);
        dispatch(loginSuccess(response));
      } else {
        const error = new Error(response.statusText);
        error.response = response;
        dispatch(loginError(error));
        throw error;
      }
    })
    .catch(error => { console.log('request failed', error); });
}

рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ, рдмрд╕ рдХреЙрд▓ рдХрд░реЗрдВ

this.props.login(); // assuming it was bound with bindActionCreators before

// --or--

this.props.dispatch(login()); // assuming you only have dispatch from Connector

рдЕрдВрдд рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдХреНрд╕рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдбрд╝реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд▓рд┐рдЦрддреЗ рд╣реБрдП рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд async рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд┐рдЦрдирд╛ рдЬреЛ рднреА рдЖрдк async рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХ ( dispatch => {} рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕) рдХреЛ рдЕрднреА Redux рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 1.0 рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ Redux -thunk рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕ рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк Redux-рд╡рд╛рджрд╛-рдорд┐рдбрд▓рд╡реЗрдпрд░ рдпрд╛ Redux- рд╡рд╛рджрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ рд╢реИрдпрд░реЙрди : рдХреНрд▓реИрдк: рдпрд╣ рдПрдХ рдЕрджреНрднреБрдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдереА! ;) рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рдмреЗрдпрд░рди рдХрд╛ рдЬрдмрд░рджрд╕реНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг! : рдЯреНрд░реЙрдлреА:

@gaearon рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдП? рдХреНрдпрд╛ рдпрд╣ рдбреЛрдореЗрди рд▓реЙрдЬрд┐рдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдЬрдЧрд╣ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЛ рддреЛрдбрд╝рдиреЗ рдЬреИрд╕рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреЗрдЯ рд╕реЗ рдХреБрдЫ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдкреИрд░рд╛рдореАрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдордиреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Reducers (рдкрд░рдорд╛рдгреБ рдкреНрд░рд╡рд╛рд╣) рдореЗрдВ API рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╣рд╛рдпрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдкрд╛рдпрд╛ ред

рд╣рдордиреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ Reducers (рдкрд░рдорд╛рдгреБ рдкреНрд░рд╡рд╛рд╣) рдореЗрдВ API рдХреЙрд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд╣рд╛рдпрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдкрд╛рдпрд╛ред

рдпрд╣ рд░рд┐рдХреЙрд░реНрдб / рд░рд┐рдкреНрд▓реЗ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдард┐рди рд╣реИрдВред рдЖрдк Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИред :-)

рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рддреНрдп рдХреЗ рдПрдХрд▓ рд╕реНрд░реЛрдд рдХреЛ рддреЛрдбрд╝рдиреЗ рдЬреИрд╕рд╛ рд╣реИред

"рд╕рддреНрдп рдХрд╛ рдПрдХрд▓ рд╕реНрд░реЛрдд" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рдХреЛрдИ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рддрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рд╕рднреА рдбреЛрдореЗрди рддрд░реНрдХ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП"ред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдП? рдХреНрдпрд╛ рдпрд╣ рдбреЛрдореЗрди рд▓реЙрдЬрд┐рдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рдЬрдЧрд╣ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

Reducers рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпреЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд╣рд╛рдБ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рд╡реЗ рдШрдЯрдХреЛрдВ, рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕, рд░рд┐рдХреЙрд░реНрдбреЗрдб рдХреНрд░рдордмрджреНрдз рд╕рддреНрд░ рдЖрджрд┐ рд╕реЗ рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рд╕реБрдВрджрд░рддрд╛ рд╣реИред

рдХреЛрдИ рднреА рдПрдкреАрдЖрдИ рдХреЙрд▓ (рдпрд╛ рддрд░реНрдХ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) reducers рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ Redux рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдерди рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЖрдкрдХреЛ рд╕реНрдЯреЗрдЯрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рдЬреНрдп рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ:

// Simple pure action creator
function loginFailure(error) {
  return { type: LOGIN_FAILURE, error };
}

// Another simple pure action creator
function loginSuccess(userId) {
  return { type: LOGIN_SUCCESS, userId };
}

// Another simple pure action creator
function logout() {
  return { type: LOGOUT };  
}


// Side effect: uses thunk middleware
function login() {
  return dispatch => {
    MyAwesomeAPI.performLogin().then(
      json => dispatch(loginSuccess(json.userId)),
      error => dispatch(loginFailure(error))
    )
  };
}


// Side effect *and* reads state
function toggleLoginState() {
  return (dispatch, getState) => {
    const { isLoggedIn } = getState().loginState;
    if (isLoggedIn) {
      dispatch(login());
    } else {
      dispatch(logout());
    }
  };
}

// Component
this.props.toggleLoginState(); // Doesn't care how it happens

рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ _design_ рд╣реИрдВред
Reducers рд╕рд┐рд░реНрдл рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рд╣реИрдВ рдФрд░ рдЗрдирдХрд╛ async рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред

Reducers рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд░рд╛рдЬреНрдп рдХреИрд╕реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдорд╛рдиреНрдп рдмрд┐рдВрджреБ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

рдЬрдм рддрдХ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдВрд╕реНрдХрд░рдг рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛, рддрдм рддрдХ рдореИрдВ рдкреЛрд╕реНрдЯрдкрд╛рд░реНрдЯреА рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рджреЗрддрд╛ рд╣реВрдВред

: +1:

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ)ред

рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рджреЛ рдмрд╛рд░ "рд╕рдмрдорд┐рдЯ" рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рд╕рд░реНрд╡рд░ (рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░) рдореЗрдВ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рднреЗрдЬреЗрдВрдЧреЗ рдФрд░ рд╕реНрдЯреЗрдЯ рдХреЛ "рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ" (рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ) рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рджреВрд╕рд░реА рдмрд╛рд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗред

рд╡рд░реНрддрдорд╛рди рдореЙрдбрд▓ рдореЗрдВ рдЖрдкрдХреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдпрд╣ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреМрди рд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░реЗрд╖рдг рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ "рд╕рдмрдорд┐рдЯ" рдирд╣реАрдВ рд╣реИ - рддреЛ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдФрд░ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреЗрдВ, рдЕрдиреНрдпрдерд╛ - рдмрд╕ рдХреБрдЫ рднреА рди рдХрд░реЗрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдЬреИрд╕реЗ рдЪреЗрддрд╛рд╡рдиреА) рдХреЛ рднреЗрдЬреЗрдВред

рддреЛ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рджреЛ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдлреНрд▓рдХреНрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареЗрда рд╡реЗрдм рдРрдк рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдЬрдЯрд┐рд▓ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреБрдЫ рд╣рдж рддрдХ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИред

https://github.com/Day8/re-frame рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХрд▓ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИ рдЬреЛ рдПрдХрдорд╛рддреНрд░ FSM рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВред рддреЛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╡реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рд░реАрдкреНрд▓реЗ" рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ - рдЙрдирд╕реЗ https://github.com/Day8/re-frame/issues/86 рдореЗрдВ рдкреВрдЫрд╛ рдЧрдпрд╛

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓реЗрдВрдЧреЗред

рд╣рдореЗрдВ рд░реА-рдлреНрд░реЗрдо рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд░рд╣реЗрдВ!

рдореЗрд░реА рдкреБрд╕реНрддрдХ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рднреНрдп Redux рд╡реЗрдм рдРрдк рдореЗрдВ 3 рд░рд╛рдЬреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВред

1) рдШрдЯрдХ рджреЗрдЦреЗрдВ (рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ)ред рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореИрдВ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ Redux рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдПрдХ рдШрдЯрдХ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

2) рдРрдк рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐, рдпрд╛рдиреА Redux.stateред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдРрдк рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдкрд░рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдЗрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ "рд╕рдВрд╡рд╛рдж" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕, рдорд┐рдбрд▓рд╡реЗрд░реНрд╕ рдХреЗ рдмреАрдЪ "рд╕рдВрд╡рд╛рдж" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдирд┐рд░реНрдгрдп рдЗрд╕ рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП "рд╕рд╛рдЭрд╛" рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рд╣реИред рдпрд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ (рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред

3) рд░рд╛рдЬреНрдп рдЬреЛ рдЕрдиреНрдп рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ / рд▓рд┐рдмрд╛рд╕ / рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдБ рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП vladar рд╡рд░реНрдгрди рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХ рдмреНрд▓реИрдХ-рдмреЙрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрдкрдирд╛ рд░рд╛рдЬреНрдп рд╣реИ рдпрд╛ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рд░рд╛рдЬреНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдРрдк рд╕рд╛рдЭрд╛ рд░рд╛рдЬреНрдп (Redux.state) рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЬрдЯрд┐рд▓ HTTP рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдмрдбрд╝реА рдЪрддреБрд░рд╛рдИ рд╕реЗ рдореЗрд░реЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЙрд╕рдХреЗ рд╕рдордп рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдЧрд╛, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ Redux.state рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ред рдореИрдВ рдХреЗрд╡рд▓ ActionCreators / Middlewares рдХреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛, рд╕рдВрднрд╡рддрдГ Redux.state рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдирдпрд╛ Redux.state рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдордп рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рддреЛ рдореБрдЭреЗ Redux.state рдХреЛ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рд╣реЛрдЧреАред

@vladar рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрд╕реА / рдореЗрдЧрд╛рд╡рд╛рдЯ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИрдВ? рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрд╡рдпрдВ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА рдХрд╣реАрдВ рдФрд░ рдЖрдпреЛрдЬрд┐рдд рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп рд╕рдордп рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ? рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рднреА рдХреНрд▓реЛрдЬрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рдмрди рд╕рдХрддреА рд╣реИрдВ?

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдореИрдВ Redux.state рдХреЛ "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд╛рдЬреНрдп" рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдирд┐рдЬреА рд╣реИрдВред рдореЗрд░реЗ рдРрдк рдХреЛ рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдирд┐рдпрдо рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдЬреА рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рд░рдЦрд╛ рдЬрд╛рдП рдФрд░ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рд░рдЦрд╛ рдЬрд╛рдПред рдпрд╣ рдореБрдЭреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдЕрд╡рд╕рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд░рдХ рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

@vladar

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛрддреЗ рд╣реИрдВред рддреЛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╡реЗ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рд░реАрдкреНрд▓реЗ" рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ

рдЖрд╕рд╛рди рд░реАрдкреНрд▓реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ Redux рд╢реБрджреНрдз reducers рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдкреНрд░рднрд╛рд╡ рдореЗрдВ Redux.state рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ (async) рдФрд░ рдирд┐рд░реНрдзрд╛рд░рдХ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк Redux.state рдХреЗ рдКрдкрд░ bahavior рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рджреГрд╢реНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ рдкрд╛рдЧрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдпрддрд╛рддреНрдордХ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдХреНрд╖реНрдп рд╣реИ, async рдХреЛрдб рдХреЛ рджреВрд░ рд▓реЗ рдЬрд╛рдирд╛ рдФрд░ рдЗрд╕реЗ рдХреНрд░рд┐рдпрд╛ рд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ред рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдлреНрд▓рдХреНрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдпрд╛ рдореНрдпреВрдЯрд┐рдВрдЧ рдХреЛрдб рдЕрднреА рднреА рдирд┐рдпрддрд╛рддреНрдордХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯреЗрдб рд░рд┐рдбреНрдпреВрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рде рд░реАрдкреНрд▓реЗ-рдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдпрд╛ рддреЛ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдпрд╣ рд╕рдВрднрд╡рдд: рдереЛрдбрд╝реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдХрдИ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЖрд╕рд╛рди рд╕рдордп-рд╕рд╛рд░рд┐рдгреА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Redux рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдРрдк рд╕реНрдЯреЗрдЯ рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ)ред

рдЖрд╕рд╛рди рд╕рдордп-рд╕рд╛рд░рд┐рдгреА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо Redux рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдРрдк рд╕реНрдЯреЗрдЯ рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рд╣рдореЗрд╢рд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ)ред

Redux DevTools рд╕реНрдиреИрдкрд╢реЙрдЯ рдФрд░ рдПрдХреНрд╢рди рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрд░рд┐рдпрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк reducers рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ DevTools рд╕рдХреНрд╖рдо рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рд╕рдордп рдпрд╛рддреНрд░рд╛ рдЕрд╢реБрджреНрдз рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ _рдЗрдЯ рдкреНрд░реЗрд╖рдг (рдЕрдВрддрд┐рдо) рдХрдЪреНрдЪреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдпреЗ рд╕рд╛рджреЗ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВред рд╣рд╛рдВ, рдЖрдк API рдХреЙрд▓ рдХреЛ "рд░реЛрд▓рдмреИрдХ" рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрдЪреНрдЪреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд░реЛрд▓рдмреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрд╡рдпрдВ рд░рд╛рдЬреНрдп рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА рдХрд╣реАрдВ рдФрд░ рдЖрдпреЛрдЬрд┐рдд рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ рдФрд░ рд╡реЗ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп рд╕рдордп рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ?

рд╣рд╛рдБ, рдареАрдХ рдпрд╣реА рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб (рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдКрдкрд░ рдбрдмрд▓ рд╕рдмрдорд┐рдЯ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде)ред

function submit(data) {
  return (dispatch, getState) => {
    const { isSubmitting } = getState().isSubmitting;
    if (!isSubmitting) {
      dispatch(started(data));

      MyAPI.submit(data).then(
        json => dispatch(success(json)),
        error => dispatch(failure(error))
      )
    }
  }
}

function started(data) {
   return { type: SUBMIT_STARTED, data };
}

function success(result) {
  return { type: SUBMIT_SUCCESS, result };
}

function failure(error) {
  return { type: SUBMIT_FAILURE, error };
}

рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдлрд┐рд░ рд╕реЗ "рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ reducer рд╣реИ

const initialState = new Immutable.Map({
  isSubmitting: false,
  pendingData: null,
  error: null
});

export default function form(state = initialState, action) {
  switch (action.type) {
    case SUBMIT_STARTED:
      if (!state.isSubmitting) {
        return state.merge({
          isSubmitting: true,
          pendingData: action.data
        });
      } else {
        return state;
      }
  }
}

рдЗрд╕рд▓рд┐рдП рдЖрдк рджреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рд╣реА рддрд╛рд░реНрдХрд┐рдХ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рд╡ рдиреНрдпреВрдирддрдо рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реБрдВрджрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЪреЗрдХ _not_ reducer рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рдЕрд╕рдВрдЧрддрддрд╛ рдореЗрдВ рдЙрддрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЧрд▓рддреА рд╕реЗ рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ "рд╕рдлрд▓рддрд╛" рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреА рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛, рдФрд░ рд░рд╛рдЬреНрдп рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рд▓рдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

(рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рд╡рд╣ рдмрд┐рдВрджреБ рдерд╛ рдЬреЛ рдЖрдк рдмрдирд╛ рд░рд╣реЗ рдереЗ; ;-)

рдореИрдВ рдЧреИрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ isSubmitting рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрдереНрдп рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ рдХрд┐ SUBMIT_STARTED рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬ рджреА рдЧрдИ рд╣реИред рдЬрдм рдХреЛрдИ рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреА рд╣реИ рддреЛ рдЙрд╕ рддрд░реНрдХ рдХреЛ reducer рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм reducer рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕рд┐рд░реНрдл рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдХрднреА рднреА рдпрд╣ SUBMIT_STARTED рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреЗрд▓реЛрдб рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реА рдереА рдХрд┐ SUBMIT_STARTEDред

рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╣ рд▓рдХреНрд╖реНрдп рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдПрдХ рдирд┐рд░реНрдгрдп рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддреА рд╣реИред

Reducer рддрдм SUBMIT_STARTED рддрдереНрдп рдкрд░ рдЖрдЧреЗ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рддрд░реНрдХ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлреЗ:

case SUBMIT_STARTED:
  if (goodMood) loading...
  else nothing_happens

рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рддрдп рдХрд░рдирд╛ рдХрднреА-рдХрднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░, рдорд┐рдбрд▓рд╡реЗрдпрд░, рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдореЙрдбреНрдпреВрд▓, рд░рд┐рдбреНрдпреВрд╕рд░?

рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╢реБрджреНрдз рд░рдЦрддреЗ рд╣реБрдП рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдлреИрд╕рд▓реЗ рд╣реЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реЙрдЯ-рд░реАрд▓реЛрдбреЗрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ / рдПрд╕рд┐рдВрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдгрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡реЗ рдПрд╕реА / рдореЗрдЧрд╛рд╡рд╛рдЯ / рдХрд╣реАрдВ рдФрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб-рдкреБрди: рдЙрдкрдпреЛрдЧ рдпрд╛рдиреА рд░реЗрдбреНрдпреВрд╕рд░ рдмрдирд╛рдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

AC рд╕реАрдзреЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдореНрдпреВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЗрд╕рдХрд╛ рддрд░реНрдХ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ AC рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ state.isSubmitting рдЗрд╕рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдореНтАНрдорд┐рд▓рд┐рдд рд╣реЛрдЧреАред рдпрджрд┐ рдПрд╕реА рддрд░реНрдХ рд░рд╛рдЬреНрдп рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдирдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ рддреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗрдЯ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЖрдзрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдХреНрд░рд┐рдпрд╛ рд╣реА рд╕рд┐рдВрдХ рдЖрджрд┐рдо рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВред Redux.state рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИред рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐ рд╣рдореЗрд╢рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреА рд╣реИред рд░реАрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рдПрд╕реА рд▓реЙрдЬрд┐рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрд╕реА рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рддрд░реНрдХ рдХреЛ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХреАрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрд╕реА / рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд▓реЙрдЬрд┐рдХ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рдирд╛ рдФрд░ рдХреЗрд╡рд▓ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдпрд╛ рдЫреЛрдЯреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХреЛрдИ рднреА рд╣рдореЗрд╢рд╛ рдирдпрд╛ reducer рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдЖрд╢реНрд░рд┐рдд рдПрд╕реА рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред Redux.state рдкрд░ рдирд┐рд░реНрднрд░ рдПрд╕реА рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрд╛рд░ рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЯреЛрдХрди рдХреА рдПрдХ рд╕рдордп рд╕реАрдорд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рддрд╛рдЬрд╝рд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рд╕реЗ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп Redux.state рдореЗрдВ рдирд╣реАрдВ рд╣реИ?

рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрд╛рд╣рд░реА рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдбрдХреНрд╕ рд╕реНрдЯреЛрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрд╕реА рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рддрд░реНрдХ рдХреЛ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╢реЛ-рд╕реНрдЯреЙрдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕рдВрдЧрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдмрд┐рдВрджреБ рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рд╣реИ - рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрджреЗрд╢ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ - рдФрд░ рд╕реБрд╕рдВрдЧрдд рд░рд╣реЗрдВред

рдпрджрд┐ рдЖрдк рдПрд╕реА рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЙрдЪрд┐рдд рдХреНрд░рдо рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЖрдк рдмрд╕ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдЗрдВрдЬрди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрд╕реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ reducer рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд░реАрдпрддрд╛ рдХреА рдмрд╛рдд рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрдм рд╕реНрдЯреЛрд░ / рд░рд┐рдбреНрдпреВрд╕рд░ рд╣рдореЗрд╢рд╛ рд▓рдЧрд╛рддрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдмрд╛рд╣рд░реА рдЪреАрдЬреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЪреАрдЬ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

Redux.state рдкрд░ рдирд┐рд░реНрднрд░ рдПрд╕реА рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдмрд╛рд░ рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдХреБрдЫ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рд┐рдбреНрдпреВрд╕рд░ / рдЗрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛) рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЯреНрд░реЗрдбрдСрдлрд╝ рд╣реИ: "рдбреНрд░реЙрдкрд┐рдВрдЧ рд╣реЙрдЯ-рд░реАрд▓реЛрдбрд┐рдВрдЧ рдпрд╛ рд░реАрдкреНрд▓реЗ рдлрд╝реАрдЪрд░" рдмрдирд╛рдо "рдореИрдиреЗрдЬрд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рдЗрди рд╡рди рдкреНрд▓реЗрд╕"ред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ FSM рдпрд╛ рд╕реНрдЯреЗрдЯрдЪреИрдЯ рдЬреИрд╕реЗ рд░реА-рдлреНрд░реЗрдо рдкреНрд░рд╕реНрддрд╛рд╡ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреВрд░реНрд╡ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЕрдзрд┐рдХ рддрджрд░реНрде рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдлреНрд▓рдХреНрд╕ рдореЗрдВ рдЕрднреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред

рдореИрдВрдиреЗ рд░реА-рдлреНрд░реЗрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдмрд╣реБрдд рдЬрд▓реНрджреА) рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде Reduxред рдкреБрдирдГ-рдлрд╝реНрд░реЗрдо рджреГрд╢реНрдп рдШрдЯрдХ рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдШрдЯрдирд╛рдПрдБ рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИрдВ, рдкреБрдирдГ-рдлреНрд░реЗрдо рдШрдЯрдирд╛рдУрдВ (рдХреНрд░рд┐рдпрд╛рдУрдВ) рдХреЛ рд╕реАрдзреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ (рд╡реЗ рдПрдХ рджреГрд╢реНрдп рдШрдЯрдХ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ) рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢реБрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ Redux рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реЛрддреЗ рд╣реИрдВ reducersред

рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ рдпрд╛ рдореИрдВ рдЗрд╕рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдорд┐рдбрд▓рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдВрднрд╛рд▓реЗ рд╣реБрдП рд╣реИрдВред рдФрд░ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИред Middlewares рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (reducers) рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдмрд╛рд╣рд░ рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ Redux Middlewares reducers рдХреЛ рд▓рдкреЗрдЯрддреЗ рдирд╣реАрдВ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд░рд┐-рдлреНрд░реЗрдо рд╕реАрдзреЗ рд╢реБрджреНрдз reducers рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреА рд░рдЪрдирд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ Redux рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд░рдЦрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд░реА-рдлреНрд░реЗрдо рдИрд╡реЗрдВрдЯ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдкреНрд▓реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЬрдм рдореИрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐ рдХреЛ рдореВрд▓ рдХрд╛рд░рдг рдорд╛рдирд╛ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд░реА-рдлреНрд░реЗрдо рдХрд╛ рдПрдХ рд╣реА рдЬреЛрдЦрд┐рдо рд╣реИред

рдЕрдВрддрд░ reducers рдХреЗ рд╕рд╛рде рдордзреНрдпрд╡рд╛рд░ рдпреБрдЧреНрдорди рдореЗрдВ рд╣реИред рдЬрдм рдорд┐рдбрд╡реЗрд░реНрд╕ рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдЦрддреНрдо рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╕реАрдзреЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдХреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдИрд╡реЗрдВрдЯ / рдПрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ Redux рдХреЗрд╡рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмреАрдЪ-рдмреАрдЪ рдореЗрдВ рд╣реБрдХ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╡рд╣реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд░реА-рдлреНрд░реЗрдо рдХрд░рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рдХреАрдордд рдкрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд╕рд╛рде (рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рд╢рд╛рдпрдж рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЧрд╣ред рдЧрд▓рддред

рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ Redux рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдЙрд╕реА рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдХ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ reducer рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ reducer рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Reducer рдордзреНрдпрд╡рд╛рд░ рдпрд╛ рдЬреЛ рднреА рдХрд╣рддрд╛ рд╣реИред рдпрд╣ рдмрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ DevTools рдЦреЛрдиреЗ рдФрд░ рдЕрдзрд┐рдХ рдпреБрдЧреНрдорди рдХреА рдХреАрдордд рдкрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореБрдЭреЗ рдЕрднреА рднреА рдФрд░ рдЕрдзрд┐рдХ рд╕реЛрдЪрдирд╛ рд╣реИ рдЕрдЧрд░ рдХреБрдЫ рд╕рд░рд▓реАрдХрд░рдг (рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдШрдЯрддреА рдорд╛рддреНрд░рд╛) рдХреЗ рдКрдкрд░ рд░реА-рдлреНрд░реЗрдо рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╣реИред рдореИрдВ рдореБрдЭреЗ рдЧрд▓рдд рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкрдврд╝рддрд╛ рд╣реВрдВред

рджрд░рдЕрд╕рд▓, рдореИрдВ рдереЛрдбрд╝рд╛ рдЧрд▓рдд рдерд╛ред рдЕрдВрддрд░ Redux рдмрдирд╛рдо рд░реА-рдлреНрд░реЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЬрд╣рд╛рдВ рдЖрдк рдЕрдкрдирд╛ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВ"ред

рдпрджрд┐ рдЖрдк рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд░реЗрдбреНрдпреВрд╕рд░) рдореЗрдВ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ - рдЖрдк Redux рдореЗрдВ fsm / Statecharts рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдПрдХ рдЕрдВрддрд░ рд╣реИред @gaearon рдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдпрд╛: Redux рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЗ

рд░реА-рдлреНрд░реЗрдо рдпрд╣ рднреА рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢реБрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рд░реАрдбрдореА рдореЗрдВ рднреА рд╡реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреА рдЕрдкреЗрдХреНрд╖рд╛рдПрдВ рдЕрд▓рдЧ рд╣реИрдВ: рдЖрдк рдЕрдкрдиреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдлрд┐рд░ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╡реЗ рд░рд┐рдкреНрд▓реЗ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ (рдФрд░ рдпрд╣реА рдореИрдВрдиреЗ https://github.com/Day8/re-frame/issues/86 рдкрд░ рдкреВрдЫрд╛)ред

рдореИрдВ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдорд╛рдирддрд╛ рд╣реВрдВ рдЬрдм рдЖрдкрдХреЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ @ tomkis1 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╣рд░ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЯ (рд╣рд░ рдЗрд╡реЗрдВрдЯ рдкрд░

рд╣реЙрдЯ рд░реАрд▓реЛрдбрд┐рдВрдЧ рдЕрднреА рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ "рдЕрддреАрдд" рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рд╕рдордп рдореЗрдВ рд░рд╛рдЬреНрдп рдХреА рдХреБрдЫ рдирдИ рд╢рд╛рдЦрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдЕрдВрддрд░ рд╢рд╛рдпрдж рд╕реВрдХреНрд╖реНрдо рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдЗрдб рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдорд┐рдбрд▓рд╡рд░реНрд╕ рдХреЗ рд╕рд╛рде рд╢реБрджреНрдз рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреА рд░рдЪрдирд╛ рдХрд░рдХреЗ HTTP рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд░рдЪрдирд╛ рдирдП рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ рдЬреЛ рдЕрдм рд╢реБрджреНрдз рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдВрддрд░рд┐рдХ рд╢реБрджреНрдз рд░рд╣рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдРрдк-рдбреАрдмреА (рд╕реНрдЯреЗрдЯ) рдореНрдпреВрдЯреЗрд╢рди рдФрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЙрд╕реЗ рд╣реЙрдЯ-рд░реАрд▓реЛрдбреЗрдмрд▓ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдордХреНрдЦреА рдкрд░ рдЙрд╕рдХрд╛ рдХреЛрдб рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ Redux рдХрд░рддрд╛ рд╣реИ - рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ reducer (рдЗрд╕реЗ рд╕реБрдиреЗрдВ) рдкрд╛рд╕ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд░рд┐-рдлреНрд░реЗрдо рдмрд┐рдЪреМрд▓рд┐рдпреЗ рд╕рдХреНрд░рд┐рдп рд╣реИрдВ рдЬрдмрдХрд┐ рд░реЗрдбрдХреНрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдХреЛрдИ рднреА рддрджрд░реНрде reducer рдорд┐рдбрд▓рд╡реЗрдпрд░ / рдПрд╕реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реБрди рд╕рдХрддрд╛ рд╣реИ)ред рдПрдХ рдмрд╛рдд рдЬреЛ рдореИрдВ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдлреНрд▓рдХреНрд╕ рдФрд░ рдорд┐рдбрд▓рд╡реЗрд░реНрд╕ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрд╕реА рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреА рддрд░рд╣ рд╣реА рд╣реЛрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордЭрд╛ @ tomkis1 рд░рд╛рдЬреНрдп рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ

рдареАрдХ рд╣реИ, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ / рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдкреВрд░рд╛ рдирдпрд╛ рд░рд╛рдЬреНрдп рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ рдРрд╕рд╛ рд╣реА рдХрд╣рд╛ред

@merk рдореИрдВ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╢рд╛рдпрдж рдПрдХ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдХреЗ рджреМрд░рд╛рди рдпрд╣рд╛рдВ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ред

рдИ-рдлреНрд░реЗрдо рдбреЙрдХреНрд╕ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ: https://github.com/Day8/re-frame#talking -to-a-server

рддреЛ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдпрд╣ Redux рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдЕрдВрддрд░ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рджреЗрдЦрдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЧрд╣рд░рд╛ рд╣реИред

рд╣рдореНрдо, рдореИрдВ Redux рд╕реЗ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реВрдВ:

рдЖрд░рдВрдн рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрди HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдСрди-рд╕рдХреНрд╕реЗрд╕ рдпрд╛ рдСрди-рдлреЗрд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗрд╡рд▓ рдПрдХ рдирдИ рдШрдЯрдирд╛ рднреЗрдЬрддреЗ рд╣реИрдВ ред рдЙрдиреНрд╣реЗрдВ рдХрднреА рднреА рдРрдк-рдбреАрдмреА рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдИрд╡реЗрдВрдЯ рдХреЛ рдПрдХреНрд╢рди рд╕реЗ рдмрджрд▓реЗрдВред Redux рдореЗрдВ рдПрдХ рд╢реБрджреНрдз рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд╛рдо рд╣реИ - рдПрдХ reducerред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдореЗрд░рд╛ рджрд┐рдорд╛рдЧ рдЗрд╕ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдмрдВрдж рд╣реИред

рдореИрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдХреЛ рд╕реВрдБрдШ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдХреИрд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХрддрд╛рд░рдмрджреНрдз рдФрд░ asyncред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Redux рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдордиреНрд╡рдпрди рдФрд░ рд▓реЙрдХ-рд╕реНрдЯреЗрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд░рд╛рдЬреНрдп рдХреА рд╕реНрдерд┐рд░рддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдЧреЗ рдЪрд▓рдХрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЙрд╕реА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕реА рдШрдЯрдирд╛рдПрдБ Redux рдореЗрдВ рд╡рд┐рдкрд░реАрдд рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИрдВ рдЬрд╣рд╛рдВ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣рдореЗрд╢рд╛ рд╢реБрджреНрдз рдХреЛрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИрдВред

@vladap рдЕрдВрддрд░ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ:

1ред

  • Redux рдореЗрдВ рдЖрдк рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ @gaearon рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдореВрд▓ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░); рдЖрдкрдХреЗ reducers рд╢реБрджреНрдз рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
  • рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдкрдХреЗ рдИрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

2ред

  • рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдПрд╕реА рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддрд╛ рд╣реИред
  • рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ - рдИрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░)ред

3ред

  • рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ - рдЖрдкрдХреЛ рдПрд╕реА рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рд╕рдордиреНрд╡рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рдирд┐рд╣рд┐рдд рд╣реЛ): рдПрд╕реА рд░реАрдбреНрдпреВрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд рд░рд╛рдЬреНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ; reducer рдПрд╕реА рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЙрдЪрд┐рдд рдХреНрд░рдо рдХреЛ рдорд╛рдирддрд╛ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЖрдк AC рдФрд░ reducer рдХреЗ рдпреБрдЧреНрдорди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ reducer рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рднреА AC рдФрд░ vise versa рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд╣реИ - рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордиреНрд╡рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ


    1. рд╢реБрджреНрдз reducers рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ AC рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ Redux рддрд░реАрдХрд╛ рдЧрд░реНрдо-рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ

  • рдИрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рдкреБрдирдГ-рдлреНрд░реЗрдо рддрд░реАрдХрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ Redux рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рд░рд┐рдбреНрдпреВрд╕ рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдХреЗ), рд▓реЗрдХрд┐рди рдЕрдиреНрдп (рд╢рд╛рдпрдж рдХрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА) рд╡рд┐рдХрд▓реНрдк рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИрдВ -

рджреЗрд╡ рдЕрдиреБрднрд╡ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ - рдпрд╣ рдХреЗрд╡рд▓ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдПрд╕рд┐рдВрдХреНрд╕ рд╕рд╛рдорд╛рди (рдЯрд╛рдЗрдорд░, рд╕рдорд╛рдирд╛рдВрддрд░ http рдЕрдиреБрд░реЛрдз, рд╡реЗрдм рд╕реЙрдХреЗрдЯ, рдЖрджрд┐) рд╣реЛрддреЗ рд╣реИрдВред рд╕рд┐рдВрдХ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рд╕рдорд╛рди рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдПрд╕реА рдореЗрдВ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдмрд╛рдд рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рдЖрдкрдХреЛ рдкрд╛рдЧрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВред рд╢рд╛рдпрдж рдореБрдЭреЗ рд░реА-рдлреНрд░реЗрдо рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдПрдХ рджрд┐рди рдХреНрд▓реЛрдЬрд░ рд╕реАрдЦреВрдВрдЧрд╛ред рд╢рд╛рдпрдж рдЖрдкрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрдзрд┐рдХ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

1ред

Redux рдореЗрдВ рдЖрдк рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рджреЗрдЦреЗрдВ @gaearon рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдореВрд▓ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░); рдЖрдкрдХреЗ reducers рд╢реБрджреНрдз рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЖрдкрдХреЗ рдИрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

рдбреЙрдХреНрдЯрд░ I рдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ webapi рдХреЙрд▓ рд╢реБрд░реВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреА рд╕рдлрд▓рддрд╛ рдореЗрдВ рдШрдЯрдирд╛ рдХреЛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╣реА рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЗрд╕ рдбрд┐рд╕реНрдкреИрдЪ рдХрд┐рдП рдЧрдП рдЗрд╡реЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрд╕ рд╕рдлрд▓рддрд╛ рдХреА рдШрдЯрдирд╛ рд░рд╛рдЙрдЯрд░ рдХреЗ рд▓рд┐рдП рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛ eqред) рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рджреВрд╕рд░рд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢реБрджреНрдз рд╣реИ рдФрд░ Redux Reducer рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдкрд╣рд▓рд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ рдпрд╛ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдпрд╛рдж рдЖрддреА рд╣реИред

рджреЗрд╡ рдЕрдиреБрднрд╡ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ - рдпрд╣ рдХреЗрд╡рд▓ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдПрд╕рд┐рдВрдХреНрд╕ рд╕рд╛рдорд╛рди (рдЯрд╛рдЗрдорд░, рд╕рдорд╛рдирд╛рдВрддрд░ http рдЕрдиреБрд░реЛрдз, рд╡реЗрдм рд╕реЙрдХреЗрдЯ, рдЖрджрд┐) рд╣реЛрддреЗ рд╣реИрдВред рд╕рд┐рдВрдХ рд╕рд╛рдорд╛рди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рд╕рдорд╛рди рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдПрд╕реА рдореЗрдВ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ)ред

рд╣рдо рдЗрд╕ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВред Async рд╕рд╛рдорд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЖрдк рдЙрдиреНрд╣реЗрдВ Redux рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреЛрдИ рджреЗрд╡ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд░ рддрдм рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рдЬрдЯрд┐рд▓ рд╢реБрджреНрдз рд░реЗрдбреНрдпреВрд╕рд░ рд╣реЛрддреЗ рд╣реИрдВред Redux рдореЗрдВ рдЖрдк рд╕реНрдЯреЗрдЯ рдП, рдХреБрдЫ рдПрдХреНрд╢рди рд╕реАрдХреНрд╡реЗрдВрд╕, рд░рд┐рдбреНрдпреВрд╕рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд░реАрдкреНрд▓реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреЗрдЯ рдмреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рд╕рдм рдХреБрдЫ рд╡рд╣реА рд░рдЦрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рд░рд╛рдЬреНрдп рдП рдФрд░ рдЖрдк рд╕реЗ рдЙрд╕реА рдПрдХреНрд╢рди рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рддреБрд░рдВрдд рдЕрдкрдиреЗ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рднрд╛рд╡ рджреЗрдЦреЗрдВред рдЖрдк рдЗрд╕реЗ @ tomkis1 рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЖрдк рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдПрдВ, рдХреБрдЫ рдПрдХреНрд╢рди рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рдП рдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЛ рдХрдо рдХрд░реЗрдВ, рд╕реНрдЯреЗрдЯ рдмреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдореБрдЦрд░ рдХрд░реЗрдВред рдлрд┐рд░ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдк рдЙрд╕реА рд░рд╛рдЬреНрдп рдмреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкрд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдиреЗ рдЖрдкрдХреЗ рдРрдк рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рд╛ рд╣реИред рдореИрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░реАрдХреНрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдХрд╛рдлреА рд╣реИрд░рд╛рдиреА рд╣реЛрдЧреА рдЕрдЧрд░ рдХреНрд▓реЛрдЬреБрд░рд┐рд╕реНрдЯреНрд╕ рдореИрдВ рд▓рдЧрднрдЧ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХрдард┐рди рдЪрд┐рдХрд┐рддреНрд╕рдХреЛрдВ рдХреЛ рдорд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдорд┐рд╢реНрд░рдг рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рд░рдЪрдирд╛ рдХреЗ рдХреБрдЫ рд╕реНрддрд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╢реБрджреНрдз рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд▓рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдореВрд▓ рддрдХрдиреАрдХ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЛ рдЕрдиреНрдпрдерд╛ рд╢реБрджреНрдз рдХреЛрдб рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдирд╛ рд╣реИред рдЖрд▓рд╕реА рдореВрд▓реНрдпрд╛рдВрдХрди рдпрд╣ рд╣реИ рдХрд┐ рд╣рд╛рд╕реНрдХреЗрд▓ рдиреЗ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░рдХрд╛рд░ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реБрджреНрдзрддрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХреА, рдЬреЛ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЛрдиреИрдбрд┐рдХ рд░рдЪрдирд╛ рдФрд░ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЛ рд╢реБрджреНрдз рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд┐рд╡рд░рдг рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЖрдк рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрдо рд╕реЗ рдХрдо рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдкрдХреНрд╖реА рдХреЗ рд╕реНрддрд░ рдХреЗ рджреГрд╢реНрдп рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ рд╕рд╛рде рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЕрд╕реНрд╡реАрдХрд░рдг, рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рди рдХрд░реЗрдВ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдПрдлрдкреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рдкрдврд╝рдиреЗ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЛред рдореИрдВ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдЖрдИред

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╣реА рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЗрд╕ рдбрд┐рд╕реНрдкреИрдЪ рдХрд┐рдП рдЧрдП рдЗрд╡реЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ (рд░рд┐рдбреНрдпреВрд╕рд░) рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП HTTP рдЕрдиреБрд░реЛрдзред IO рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рди рдХрд░реЗред рд░рд╛рдЬреНрдп рдХреЛ рд╕реАрдзреЗ рд╕рдлрд▓рддрд╛ / рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рдпрд╣ рджреВрд╕рд░рд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢реБрджреНрдз рд╣реИ рдФрд░ Redux Reducer рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдкрд╣рд▓рд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрджрд┐ рдЖрдк reducer рдореЗрдВ рдПрдХ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрдк рдЗрд╕реЗ @ tomkis1 рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдорддред рдФрд░ рдпрд╣реА рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдЬрдм рдореИрдВрдиреЗ "рдЕрдиреНрдп (рд╢рд╛рдпрдж рдХрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА) рд╡рд┐рдХрд▓реНрдк" рд▓рд┐рдЦрд╛ рдерд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдпрджрд┐ рдЖрдк reducer рдореЗрдВ рдПрдХ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрджреНрдз рдРрдк рд╕реЗ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ Redux рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЖрдк reducers рдореЗрдВ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдХреЛрдб рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред Redux рдореЗрдВ рдпреЗ рдирд┐рд░реНрдорд╛рдг AC рдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдЬреЛ рдореБрдЭреЗ рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд╡рд╣реА рд╣реИ рдЬреЛ рдмрд┐рдЪреМрд▓рд┐рдпреЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдИрд╡реЗрдВрдЯреНрд╕ (рдХреНрд░рд┐рдпрд╛рдУрдВ) рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЪреМрд▓рд┐рдпреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

рдПрд╕реА / рдорд┐рдбрд▓рд╡реЗрд░реНрд╕ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓, рд╕реЗрд╡рд╛рдУрдВ (рдЬреИрд╕реЗ рдХреЛрдгреАрдп рд╕реЗрд╡рд╛рдУрдВ), рдЖрдк рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд▓рд┐рдмрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рддрдм рдПрд╕реА рдпрд╛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдореБрдЭрд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ AC рдЗрд╕ рдХреЛрдб рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред AC рдХреЛ рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рдирд┐рд░реНрдорд╛рддрд╛ / рдХрд╛рд░рдЦрд╛рдиреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рддрд░реНрдХ рд╕реЗ рдХрд╛рд░реНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реЛрдВред рдпрджрд┐ рдореИрдВ рдПрдХ рд╢реБрджреНрдзрддрд╛рд╡рд╛рджреА рдмрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ рдХреЛрдб рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рдкрд░ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред ActionCreator рдирд┐рдпрдВрддреНрд░рдХ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╢рдмреНрдж рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреЛрдб рд╕рд┐рд░реНрдл рдПрдХ-рд▓рд╛рдЗрдирд░ рд╡реЗрдмрдкреА рдХреЙрд▓ рд╣реИ, рддреЛ рдмрд╕ рдПрд╕реА рдХреЗ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реИ рдФрд░ рд╕рд░рд▓ рдРрдк рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

AC, midwares, 3rd party libs рдПрдХ рд▓реЗрдпрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрдпрд░ рдХрд╣рд▓рд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдореВрд▓ Facebook WebApiUtils рдЗрд╕ рдкрд░рдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реБрдиреЗрдВрдЧреЗ рдФрд░ Redux.state рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗ, рддреЛ рд░рд┐рд▓реЗ рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдРрдк рдФрд░ рд╡реНрдпреВ рд╕реЗ Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд░рд╛рдЬреНрдп)ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ 3 рдкрд╛рд░реНрдЯреА рдХреЗ рдХрд╛рдореЛрдВ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдореИрдВ рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рддреЛ рдпрд╣ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпреЗ рд▓рд┐рдмрд╛рд╕, рд╕реЗрд╡рд╛рдПрдВ, рдмрд░реНрддрди рдЖрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдПрдХ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдПрдХ рдордВрдЪ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдореИрдВ рдЕрдкрдиреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рд╕реЗ рднрд░рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдореИрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рд▓реЗ рдЬрд╛рддрд╛ рд╣реВрдБред рдореИрдВ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреАрдЖрдИ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░рд╛ рдРрдк рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрди рдПрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рд╣рд╛рд╕реНрдХреЗрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА) рдХреЛ рд╕реБрдирдХрд░ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╣реИрдХ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдЕрднреА рднреА рд╢реБрджреНрдзрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ (рд╕рдВрднрд╡рдд: рдПрдХ рдкреВрд░реНрдг рдЕрдХрд╛рджрдорд┐рдХ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ) рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдмрд╛рдд рд╣реИ рдЬреЛ рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдЧрд▓рдд рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЬрдЧрд╣ рд╕рдм рдХреБрдЫ рд╣реЛрдирд╛ рдлрд╛рдпрджреЗрдордВрдж рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрд╣реБрдд рд╕реЛрдЪрддрд╛ рд╣реВрдВред

рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдХрд╛рд░реНрдп рд╡реНрдпрд╛рдкрд╛рд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдореЗрдВ DOM рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЛрдб рдХреЛ рдПрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдлрд╛рдЙ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореВрд╕рдореЛрд╡ рдЗрд╡реЗрдВрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдпрд╛ рддреЛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ addListener ('mousemove', ...) рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдЗрд╕ рдЕрдЪреНрдЫреЗ рдкреГрдердХреНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВред ActionCreators, midwares рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╣реИрдВред

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдПрдХ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╡реЗрдмрдкреА рдХреЗ рдЦрд┐рд▓рд╛рдл рдРрдк рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдЧрд▓реА рдХреЙрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдХреИрдиреЛрдирд┐рдХ рдлреЙрд░реНрдо рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореИрдВ Redux.state рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рддрд░реНрдХ рдореЗрд░реЗ reducers рдореЗрдВ рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ рдмрд╛рд░-рдмрд╛рд░ рдЕрдкрдиреЗ reducers рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗред рдпрд╣ рдордзреНрдпрд╡рд░реНрдЧ рдореЗрдВ рд╣реЛрдЧрд╛ред рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдореИрдВ рдЧрдиреНрджреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдРрдк рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдПрдкреАрдЖрдИ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдмрд╛рд░ рд╣реЛ рдЧрдпрд╛, рддреЛ рд╢рд╛рдпрдж рдореБрдЭреЗ рд╣рдорд╛рд░реА рд╡реЗрдмрдкреА рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рдорд┐рд▓реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдореИрдВ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдкрд░ рд╕рдм рдХреБрдЫ рд╣реЛрдирд╛ рдПрдХ рдЖрд╕рд╛рди рдРрдк рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╡рд┐рдкрд░реАрдд, рдореБрдЭреЗ рдЪрд┐рдВрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреГрдердХреНрдХрд░рдг рд▓рд╛рднрдкреНрд░рдж рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХреЛ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдорд╛рдорд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕рдХреЗ рд╡рд┐рд╣рд┐рдд рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ reducers рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреВрдВрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп reducers рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд░реАрдкреНрд▓реЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рджреЗрдЧрд╛ рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рд╢реБрджреНрдз рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╣реА рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЗрд╕ рдбрд┐рд╕реНрдкреИрдЪ рдХрд┐рдП рдЧрдП рдЗрд╡реЗрдВрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЖрдк reducers рддрд░реНрдХ рдХреЗ рд╕рд╛рде webapi рдХреЙрд▓ рдХреЛ рдПрдХ рдЬрдЧрд╣ рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЬреЛ рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдлрд▓рддрд╛ рдкрд░ рдШрдЯрдирд╛ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред

рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рд╡реЗрдмреИрдкреА -> рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ -> рд╡реЗрдмрдкреА -> рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ -> ... ... -> reducer рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо, рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдХ рдХреНрд▓рд┐рдХ рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ рд╕рдВрднрд╡рддрдГ рдПрд╕реА рдореЗрдВ рд╣реЛрдВрдЧреЗ, рдореИрдВ рдЗрд╕реЗ рддрдм рддрдХ рдирд╣реАрдВ рдмрд╛рдВрдЯреВрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдЦрддреНрдо рди рд╣реЛ рдЬрд╛рдПрдВред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ?

рдореИрдВ рдпрд╣рд╛рдВ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрд╕реА рджрд╛рдпрд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╣ рд╡рд╛рджрд╛ рдпрд╛ рд╡реЗрдзрд╢рд╛рд▓рд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрдЧреАред

рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА Reduxers рдХрд┐ рд╕реЛрдЪрд╛ рдкрд░ рдЕрд▓рдЧ рдЕрд▓рдЧ рд░рд╛рдп рд╣реЛ рд╕рдХрддреА рд╣реИ (@gaearon, @johanneslumpe, @acdlite, @emmenko ...)

@vladap рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рддрдЪреАрдд рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╡рд┐рд╖рдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдЪрд▓реА рдЧрдИред рдЖрдкрдиреЗ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдХрд╛ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рджрд┐рдпрд╛ рд╣реИ:

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрд╕реА рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рддрд░реНрдХ рдХреЛ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд╡рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг:

рд╕реНрдерд┐рддрд┐ 1: рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреГрд╖реНрда рдкрд░ рдХрд╣реАрдВ рд╢реАрд░реНрд╖ -10 рдмреНрд▓реЙрдЧ рд▓реЗрдЦрдХреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред рдЕрдм рдЖрдкрдиреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдПрдХ рд╢реНрд░реЗрдгреА рд╣рдЯрд╛ рджреА рд╣реИред рд╕рдлрд▓ рд╣рдЯрд╛рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рд╕реЗ рд▓реЗрдЦрдХреЛрдВ рдХреА рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╕реНрдерд┐рддрд┐ 2: рдЖрдк рдПрдХ рдЕрд▓рдЧ рдкреГрд╖реНрда рдкрд░ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд▓реЗрдЦрдХреЛрдВ рдХреА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╢реАрд░реНрд╖ -10 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИред рдЖрдк рдХреБрдЫ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЛ рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдлрд▓ рдбрд┐рд▓реАрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдЕрдкрдбреЗрдЯ рдХрд░рдиреА рд╣реЛрдЧреАред

рддреЛ рд╣рдо рдЗрд╕реЗ рд░рд╛рдЬреНрдп-рдЗрдВрдЬрди рдХреЗ рд╕реНрддрд░ рдкрд░ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ? (рд╣рдо рдХреБрдЫ рдорджрдж рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд░рд╛рдЬреНрдп рдЗрдВрдЬрди рдЕрдкрдиреЗ рдЖрдк рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рд░рд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)

рд╡рд┐рдХрд▓реНрдк:
рдП) рд╣рдордиреЗ рдЗрд╕ рддрд░реНрдХ рдХреЛ рдПрд╕реА рдореЗрдВ рд░рдЦрд╛ред рддрдм AC CategoryApi (рд╣рдЯрд╛рдПрдЧрд╛) рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдЧрд╛, userList рд░рд╛рдЬреНрдп рд╕реЗ рдФрд░ commentList рд░рд╛рдЬреНрдп (рдЕрдм рд░рд╛рдЬреНрдп рдореЗрдВ рдореМрдЬреВрдж рдХреМрди-рд╕реА рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╕реЗ рдкрдврд╝реЗрдЧрд╛, UserListApi рд╕реЗ рдмрд╛рдд рдХрд░реЗрдЧрд╛ CommentListApi (рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) + TOP_AUTHORS_UPDATED рдФрд░ / рдпрд╛ TOP_COMMENTS_UPDATED ред рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЛрдореЗрди рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░реЗрдЧрд╛ред

рдмреА) рд╣рдо рдЗрд╕реЗ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ userList рдФрд░ commentList рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдпреЗ рд╣реИрдВрдбрд▓рд░ рджреЛрдиреЛрдВ DELETE_CATEGORY_SUCCESS рдИрд╡реЗрдВрдЯ рд╕реБрдиреЗрдВрдЧреЗ, рдлрд┐рд░ рдЕрдкрдиреА API рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдмрджрд▓реЗ рдореЗрдВ TOP_AUTHORS_UPDATED / TOP_COMMENTS_UPDATED рдИрд╡реЗрдВрдЯ рджреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗрд╡рд▓ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЛрдореЗрди рдХреА рд╕реЗрд╡рд╛рдУрдВ / рд╕реНрдерд┐рддрд┐ рдХреЛ рдЫреВрддрд╛ рд╣реИред

рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрддрд░ рдкрд░ рднреА рдПрд╕реА рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рдХрдо рдорд┐рд▓рддреА рд╣реИрдВред

рдпрд╣ рдЕрдВрддрд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рд░реА-рдлреНрд░реЗрдо рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХреНрд╢рди рдХреНрд░рд┐рдЯрд░реНрд╕ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╣реИрдВред рдФрд░ DOM рдЗрд╡реЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ AC рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдПрд╕реА рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдПрд╕реА рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред UserListApi рдФрд░ CommentListApi рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ AC рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбреЛрдореЗрди рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рдПрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ AC (рдирд┐рдпрдВрддреНрд░рдХ рдЬреИрд╕рд╛) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдиреНрд╣реЗрдВ рддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╛рдлреА рдХреНрд▓рд╛рд╕рд┐рдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЛрдб рд╣реИ рдЬрдмрдХрд┐ рд░реА-рдлреНрд░реЗрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдШрдЯрдирд╛-рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдереЛрдбрд╝реЗ рд╕реЗ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкрд╕рдВрджреАрджрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдШрдЯрдирд╛-рдЖрдзрд╛рд░рд┐рдд, рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ, cps рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@vladap рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ: рдЬрдм reducers рдХреЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рдкрд░ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпрд╣ рдХрд╣реЗрдВ рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛: (state, action) => (state, sideEffects?) рдЬрд╣рд╛рдВ рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕ рдПрдХ рдмрдВрдж рд╣реИред рдлрд┐рд░ рд╕рдВрджрд░реНрдн рдврд╛рдВрдЪреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рддреЛ рдЗрди рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд░реАрдкреНрд▓реЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред

рддрдм рдореВрд▓ рдЕрдВрдХ рд╡рд┐рд╡рд░рдг рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

export default function user(state = initialState, action) {
  switch (action.type) {
    case LOGIN_ATTEMPT:
      return [state, () => {LoginApiCall.login(action.user)}];
    case LOGGED_FAILED:
      // do something
      return state;
    case LOGGED_SUCCESSFULLY:
      // do something else
     return state;
    default:
      return state;
  }
}

(рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ)

рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реИ, рдЖрдкрдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╣рдореЗрд╢рд╛ рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ async рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдПрдХреНрд╢рди / рдИрд╡реЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рддрд░реНрдХ рд░рд┐рдбреНрдпреВрд╕рд░реНрд╕ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ рдЕрдзрд┐рдХ рдХреЛрдб рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред

рдЖрдк рдирд┐рдпрдорд┐рдд FSM рдпрд╛ Statechart рдЬреИрд╕реЗ рдХреЛрдб (рд░реАрдбреНрдпреВрд╕рд░ / рдЗрд╡реЗрдВрдЯ-рд╣реИрдВрдбрд▓рд░ рдХреА рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде) рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдореЗрдВ рдкреВрд░реНрд╡-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХреНрд▓реЛрдЬрд░ рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдпрд╣ рдХрд╣реЗрдВ рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛: (рд░рд╛рдЬреНрдп, рдХреНрд░рд┐рдпрд╛) => (рд░рд╛рдЬреНрдп, рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕?) рдЬрд╣рд╛рдВ рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕ рдПрдХ рдмрдВрдж рд╣реИред рдлрд┐рд░ рд╕рдВрджрд░реНрдн рдврд╛рдВрдЪреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рддреЛ рдЗрди рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд░реАрдкреНрд▓реЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ)ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдПрд▓реНрдо рдХреЛ (State, Action) => (State, Request?) рд╕рд╛рде рдХрд░рддреЗ рд╣реБрдП рд╕реБрдирд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдХрд░реЗрдВред

рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдкреНрд░реЗрд░рдгрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ eventsourcing рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рд╕реЗ - рдЕрдХреНрдХрд╛ рд╣рда , PersistentFSM ред рдореИрдВ рдирд╣реАрдВ рдХрд╣рддрд╛ рдХрд┐ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдЕрднрд┐рдиреЗрддрд╛ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдпрд╛рдж рд╣реИ рддреЛ рдХрднреА-рдХрднреА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░реАрдкреНрд▓реЗ рдлрд╝реАрдЪрд░ рд╣рдорд╛рд░реЗ рдлрд╝реИрд╕рд▓реЛрдВ рдХреЛ рддрд┐рд░рдЫрд╛ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдЬрд╣рд╛рдБ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ... "рдореИрдВ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ reducer рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛"ред рдпрд╣ рдЕрд╕реНрдкрд╖реНрдЯ рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЛрдб рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдЗрд╕рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ / рднреВрдорд┐рдХрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд╛рдЯ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рд╕реНрд▓рд╛рдЗрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ рд░рд┐рдкреНрд▓реЗ рдлреАрдЪрд░ рдХреЛ рдПрдХ рддрд░рдл рд░рдЦ рджреВрдВ рддреЛ рдореИрдВ рдЕрдкрдирд╛ рдмрд┐рдЬрдиреЗрд╕ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛? рдореИрдВ рдПрдХ рдПрдХреНрд╢рди рд▓реЙрдЧ рдХреЗ рд╕рд╛рдордиреЗ рдЕрдкрдирд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рдЦреВрдВрдЧрд╛ред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ, рдпрд╛ рдореИрдВ рдЬреЛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рд╕рднреА рдХрдард┐рди рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдгрдп рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдлрдПрд╕реАрдЯреАрдПрд╕ (рдХреНрд░рд┐рдпрд╛рдПрдВ) рдХреА рдПрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣рд▓ рдХреА рдЧрдИ рдзрд╛рд░рд╛ рд╣реЛрдЧреАред Reducers рдЖрдо рддреМрд░ рдкрд░ рд╕рд░рд▓ updaters рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдирдХреА рдореБрдЦреНрдп рдЬрд┐рдореНрдореЗрджрд╛рд░реА Redux.state рдкрд░ рдПрдХреНрд╢рди рдкреЗрд▓реЛрдб рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╣реЛрдЧреАред рдЙрдирдХреЗ рдкрд╛рд╕ рдХреБрдЫ рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдереНрдп (рдХрд╛рд░реНрд░рд╡рд╛рдИ) рдХреА рдзрд╛рд░рд╛ рдкрд░ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдереНрдпреЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ред

рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХреЛрдб рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдорд╣рдВрдЧреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ, рд╢рд╛рдпрдж рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ, рдЦреБрдлрд┐рдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдХреБрдЫ рднреА рдЫрд┐рдкрд╛рдХрд░ рдЪрд▓рддреА рд╣реИ, рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдмреЗрд╣рддрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Feред рдореИрдВ рддрд░реНрдХ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рджреГрд╢реНрдп рдкрд░рдд рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдПрдХреНрд╢рди рд▓реЙрдЧ рдХреЗ рд╕рд╛рдордиреЗ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЙрд╕реА рдПрдХреНрд╢рди рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реБрдП REST рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реЗ рджреГрд╢реНрдп рдкрд░рдд рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж)ред

рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдХреНрдХрд╛ рджреГрдврд╝рддрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдПрдХ рджрд┐рди рдПрд▓реНрдо рдкрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

Elga meninging рдХреЗ рд▓рд┐рдП https://gist.github.com/evancz/44c90ac34f46c63a27ae - рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░реЛрдВ (рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдиреНрдирдд) рдХреЗ рд╕рд╛рдеред

рд╡реЗ рдХрд╛рд░реНрдп (http, db, рдЖрджрд┐) рдФрд░ рдкреНрд░рднрд╛рд╡ (рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред рддреЛ рдЖрдкрдХрд╛ "reducer" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирдП рд░рд╛рдЬреНрдп рдФрд░ рдкреНрд░рднрд╛рд╡ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдмрд╛рдд (рдФрд░ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛) - рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд░реАрдбреНрдпреВрд╕рд░ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдХрд╛рд░реНрдп рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк http рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмреИрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде DB рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред

рдпрд╛ рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, "рд░реАрдкреНрд▓реЗ рдореИрдиреЗрдЬрд░" рдХрд╣реЗрдВ рдЬреЛ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдиреЙрдУрдк рд╣реИред

@ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдмрд╕ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕реНрд╡рд╛рдпрддреНрдд рдкрдХреНрд╖ рдкреНрд░рднрд╛рд╡ рдХреЛрдб рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рд╢рд╛рдпрдж рд░рд┐рдкреНрд▓реЗ рдкрд░ рдХрд╣рд░ рдврд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдЯрд╛рдЗрдордЯреНрд░реЗрд▓ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЯрд╛рдЗрдорд╡реЗрд▓ рдПрдХ рд╣реА рдХреЛрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдпрд╣ Redux.state рдореЗрдВ рди рд╣реЛред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдРрдк рдХреЗ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рднреА рдЖрдкрдХреЛ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рд▓реЙрдЧрд┐рди рдПрд╕реА рдореЗрдВ рд╕рдорд╛рдкреНрддрд┐ рд╕рдорд╛рдкреНрддрд┐ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд╣реАрди рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдРрдк рдпрд╛ рд▓реЙрдЧрдСрдл рдХреЗ рд╕рд╛рде рдорд░ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЕрдВрддрд░рд╛рд▓ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЯреЛрдХрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рдпрд╣ LOGIN_EXPIRED рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд░реАрдбреНрдпреВрд╕рд░ рдХреЛ рд╕реБрдирдиреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рди рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд░реВрдЯрд░ рд╕рдВрдХреНрд░рдордг рдХреЛ / рд▓реЙрдЧрд┐рди рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рдкрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рджрд╛рдпрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕реМрдВрдкрдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ LOGIN_EXPIRED рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИред рдпрд╛ рдЕрдкрдиреА рдЦреБрдж рдХреА рд▓рд┐рдЦреЛ рдФрд░ рдЯреЛрдХрди рдФрд░ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд░рд╛рдЬреНрдп рдпрд╣рд╛рдБ рд░рдЦреЛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рджреГрд╢реНрдп рдкрд░рдд рдореЗрдВ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

рдЖрдк рдЗрд╕реЗ Redux.state рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЕрд╕реНрдерд┐рд░ рд╣реИред рдмрдбрд╝реЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣ рдХрдард┐рди рд╣реИ, рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд░реАрдбреНрдпреВрд╕рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдХреЗрд╡рд▓ рдПрдХ reducer рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБ рдореЗрдВ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдХреБрдВрдЬреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рдЧреБрдгреЛрдВ рдХреЗ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЦрд░рд╛рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА reducer рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХрд╛ рдХреБрдЫ рдЯреБрдХрдбрд╝рд╛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрджреНрдпрддрди рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕рднреА reducers рдХреЛ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд░рд╛рдЬреНрдп рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЙрдЧрд┐рди рд╣реИ - рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдФрд░ рдпрд╣ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд░ рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рджреГрд╢реНрдп рдкрд░рдд рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рдЗрд╕реЗ Redux.state рдХреЗ рд╕рдорд╛рди рд░реВрдк рдореЗрдВ рдкреБрди: рдЖрдХрд╛рд░ рджреЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рд╕реНрдерд╛рди рд╕реНрдерд┐рддрд┐ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ Redux.state рдкрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рд░рд╛рдЬреНрдп рдФрд░ рдЯреАрдо рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рдЖрдк рдЗрд╕реЗ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

@vladar @vladap

рд╡рд╛рд╣, рдХрд┐ рдПрд▓реНрдо рдореБрдЯреНрдареА рд╢рд╛рдВрдд рд╢рд╛рдВрдд рд╣реИ! рдпрд╣ Cycle.js "рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ" рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рднреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред

@merk рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реНрд╡рд╛рдпрддреНрдд LOGIN_EXPIRED рд░рд┐рдкреНрд▓реЗ рдХреЛ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХреНрд╢рди рд▓реЙрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд░реАрдкреНрд▓реЗ рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рдПрдХреНрд╢рди рд▓реЙрдЧ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреИрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@gaeron рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдПрд▓реНрдо рдФрд░ рд╕рд╛рдЗрдХрд┐рд▓ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдПрдХ рдЖрдзрд╛рд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рджреЗрддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдкрд░рдд (http, db ...) рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдРрдк рдкрд░ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рддрд╛ рд╣реВрдВред рдлрд┐рд░ рдореБрдЭреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреЛрдВрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рдХреА рдкрд░рдд рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд╢реБрджреНрдз рдРрдк рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореЗрд░рд╛ рдРрдк рдпрд╣ рд╡рд░реНрдгрди рдХрд░ рд╕рдХреЗ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд╛рд▓рдХреЛрдВ рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢, рдПрд▓реНрдо рдЗрдлреЗрдХреНрдЯреНрд╕) рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рд╣реЛрдирд╛)ред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдРрдк рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ "рдкреНрд░реЛрдЧреНрд░рд╛рдо" рдмрдирд╛ рд░рд╣рд╛ рд╣реИ (рдореБрдЭреЗ рдбреЗрдЯрд╛ рдордВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ) рдЬреЛ рддрдм рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдкрд░рдд рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЗрд░рд╛ рдРрдк рдХреЗрд╡рд▓ рдЗрд╕ "рдкреНрд░реЛрдЧреНрд░рд╛рдо" рдХреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рддрдм рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдПред

@merk : рдЖрдЧреЗред рдпрджрд┐ рдЯреЛрдХрди рдФрд░ рдЗрд╕рдХреА рд╕рдорд╛рдкреНрддрд┐ Redux.state / рдпрд╛ рдХрд╣реАрдВ рднреА рдХрд┐рд╕реА рдЕрдиреНрдп js рд╕реЗрд╡рд╛ рдореЗрдВ рд░рдЦреА рдЬрд╛рдПрдЧреА, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирдП рдЯреИрдм рдореЗрдВ рдРрдк рдЦреЛрд▓рдиреЗ рдкрд░ рдпрд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡рд╣ рд▓реЙрдЧ рдЗрди рд░рд╣реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рдЬреНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реЗрд╢рдирд╕реНрдЯреЛрд░ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рднреА, рд░рд╛рдЬреНрдп рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЯреЛрдХрди рд╕рдорд╛рдкреНрддрд┐ рдХрд╛ рдорддрд▓рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рддрддреНрдХрд╛рд▓ рд╕рдлрд╛рдИ рдФрд░ / рд▓реЙрдЧрд┐рди рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдирд╣реАрдВ рд╣реИред рдЬрдм рддрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ (рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреИрд╢ рд╣реИ) рд╡рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LOGIN_EXPIRED рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддреА рд╣реИред Redux.state рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреГрдердХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд╛рдиреНрдп рдЯреЛрдХрди рдореМрдЬреВрдж рд╣реИред Redux.state рдореЗрдВ рдкреГрдердХ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреЛрдХрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рджреГрд╢реНрдп рдкрд░рдд рдкрд░ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдФрд░ рдкреБрдирд░реНрдЦрд░реАрдж рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрддрд░ рдкрд░ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдЬреЛ рдПрдХ рджреГрд╢реНрдп рдкрд░рдд рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

@vladar рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛

рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХреИрд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЗрди рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╡реЗ рдЕрд╕реНрдерд╛рдпреА рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдПрдХ async рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

actionCreator() {
  ... getState
  ... some logic L1
  ... dispatch({ACTION1})
}

reducer() {
  case ACTION1
    ... some logic L2
    ... x, y result from L2
    ... some logic L3
    ... resulting in new state
    ... return new state
}

Reducer рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЧрдИ x, y рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ async рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ 3 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкрд░рд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред

1) рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд▓рд┐рдП reducer рд╕реЗ рддрд░реНрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреА рд╢рдХреНрддрд┐ рдХрдо рдХрд░реЗрдВред Reducer рдХреЗрд╡рд▓ рдЧреВрдВрдЧрд╛ рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрдирдХрд░реНрддрд╛ рд╣реИ рдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рддрд░реНрдХ L3 рд╣реИред

2) x, y рд╕реЗ Redux.state рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ, рдЗрд╕реЗ рдЕрд╕реНрдерд╛рдпреА / рдХреНрд╖рдгрд┐рдХ рдорд╛рди рдХреЗ рд╕рд╛рде рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ reducers рдФрд░ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рддреЛ рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡:

actionCreator() {
  ... getState
  ... some logic L1
  ... dispatch({ACTION1})
  // I assume I get updated state if previous dispatch is sync.
  // If previous dispatch is async it has to be chained properly.
  // If updated state can't be received here after a dispatch
  // then I would think there is a flaw.
  ... getState
  ... asyncOperation(state.x, state.y)
}

3) x, y рдХреЛ рд░рд╛рдЬреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬреЗрдВ, рдЗрд╕реЗ рдХрд┐рд╕реА рдШрдЯрдХ рдореЗрдВ рдкреНрд░реЙрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдШрдЯрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдкреВрд░реЗ рд╡реНрдпреВ рд▓реЗрдпрд░ рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПWillReceiveProps рдирдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдФрд░ async рдСрдкрд░реЗрд╢рди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдпрджрд┐ рдЖрдк рдореБрдЭрд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЬрдЧрд╣ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдлреИрд▓рд╛рддреЗ рд╣реИрдВред

@vladar
рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдБ рддрдХ рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ async рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднреЗрдЬрд╛ рдФрд░ рдПрдХ reducer рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдпрд╣ рд╡реИрдирд┐рд▓рд╛ рдлреНрд▓рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪрд░реНрдЪрд╛ рд╣реИ рдЕрдЧрд░ рдПрд╕реНрдХреЙрди рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдпрд╛ рд╕реНрдЯреЛрд░реНрд╕ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рдХрд┐ Redux рд░рд┐рдкреНрд▓реЗ рдкрд░ рдЗрди рдПрд╕рд┐рдВрдХреНрд╕ рдХреЙрд▓реНрд╕ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рд╣реИрдВред

рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХреИрд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред

рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рд╡рд╛рд╣ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (FSM рджреБрдирд┐рдпрд╛ рдореЗрдВ):

  1. рдЗрд╡реЗрдВрдЯ рдЖрддрд╛ рд╣реИ
  2. рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП FSM рдирдП рд▓рдХреНрд╖реНрдп рд░рд╛рдЬреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ
  3. рдПрдлрдПрд╕рдПрдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ! рдПрдХ рд╣реА рдШрдЯрдирд╛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИред рдФрд░ рдЪрд░рдг 3 рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди (рдпрд╛ рддрд░реНрдХ) рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдкред

рддреЛ рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рд╣реИ рдХрд┐ рдлреНрд▓рдХреНрд╕ рдореЗрдВ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕рд┐рдВрдХ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреЗ Reducers / рд╕реНрдЯреЛрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ FSM рд╣реИрдВред

рд▓реЗрдХрд┐рди async рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? Async рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдлреНрд▓рдХреНрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрд▓рдЯрд╛ рд╣реИ:

  1. рдПрд╕реА рдПрд╕реНрдХреН рд╕рдВрдЪрд╛рд▓рди (рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛) рдХрд░рддрд╛ рд╣реИ
  2. рдПрд╕реА рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ
  3. Reducer / Store рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓рдХреНрд╖реНрдп рд░рд╛рдЬреНрдп рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдкреНрд░рд╡рд╛рд╣ рдЕрднреА рднреА рд╡реИрд╕рд╛ рд╣реА рд╣реИред рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ (рдПрд╕реА рдХреЗ рд╕рд╛рде):

  1. рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрд╕реА рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдорд┐рд▓рддреА рд╣реИ
  2. рдПрд╕реА рдиреЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХрд┐рдпрд╛ рд░рд╡рд╛рдирд╛
  3. рдПрд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рдж рдирдП рд░рд╛рдЬреНрдп рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ
  4. рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП - рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реИ (рдпрд╛ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдореВрд▓реНрдп рд╣реИрдВ)

рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдгред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, рдХрд┐ рдЗрди рд╕рднреА рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рд░ рд╕рдордп рд╣реЛрддреА рд╣реИред рдЕрдХреНрд╕рд░ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдХрд┐ рдЖрдкрдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХрд┐рд╕реА рднреА рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкреНрд░рд╡рд╛рд╣ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдкрдХреЗ FSM рдХреА рд╕реАрдорд╛рдПрдБ AC рдмрдирд╛рдо рд░рд┐рдбреНрдпреВрд╕рд░ / рд╕реНрдЯреЛрд░ рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕реАрдорд╛рдПрдБ рдмрдврд╝рдиреЗ рд╕реЗ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ:

  1. рдпрджрд┐ async рдСрдкрд░реЗрд╢рди рд╕реНрдЯреЛрд░ / рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ - рддреЛ рдЖрдк рдПрдХ рд╣реА рдШрдЯрдирд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рджреЛ рд╕реНрд╡рддрдВрддреНрд░ FSM рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдЖрдк рдХреЗрд╡рд▓ рд╕реНрдЯреЛрд░ / reducer рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдШрдЯрдирд╛ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдм рд╣реИред
    рд▓реЗрдХрд┐рди AC рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде - рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░ / рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореМрдЬреВрджрд╛ рдПрд╕реА рдХреЛ рддрд░реНрдХ рдХреЗ async рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдЕрдиреНрдп reducer рдХреЗ рд▓рд┐рдП async рддрд░реНрдХ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ ... рдпрд╣ рдардВрдбрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
    рдРрд╕реЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрдард┐рди рд╣реИред
  2. рд╕рд┐рдВрдХ рдмрдирд╛рдо async рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЗ рдРрдк рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЕрд▓рдЧ рд╣реИред рд╕рд┐рдВрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП reducer рд╕рдВрдХреНрд░рдордг рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИ, async рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдПрд╕реА рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЙрди рд╕рднреА рд╕рдВрдХреНрд░рдордгреЛрдВ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдШрдЯрдирд╛ / рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдзреНрдпрд╛рди рджреЗрдВ, рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рд╛рдзрд╛рд░рдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рд╕реНрдЯреЗрдЯрдлреБрд▓ рдРрдк рд╣реИ - рддреЛ рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред

рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рд╕рдВрднрд╡рддрдГ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рдЖрдПрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдЙрдирд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдХрд╛ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рддрд░реНрдХ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЖрдкрдХреЗ FSM рдХреЛ AC рдФрд░ reducers рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХрд╛ "рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯрд┐рдВрдЧ" рд╣рд┐рд╕реНрд╕рд╛ рдЕрднреА рднреА рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдФрд░ рддрд░реНрдХ рдХреЗ рдХреБрдЫ рдЕрд▓рдЧ рд╕реНрд╡рддрдВрддреНрд░ рдЯреБрдХрдбрд╝реЗ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП (state, action) => (state, sideEffects) рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рдБ, рдпрд╣ "рдХрдо" рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдм% рдирд╣реАрдВ рд╣реИ) рд▓реЗрдХрд┐рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдбреЛрдореЗрди рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рд╣реИред

рдпрд╣ рд╡реИрдирд┐рд▓рд╛ рдлреНрд▓рдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪрд░реНрдЪрд╛ рд╣реИ рдЕрдЧрд░ рдПрд╕реНрдХреЙрди рдХреЛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдпрд╛ рд╕реНрдЯреЛрд░реНрд╕ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдлрд╝реНрд▓рдХреНрд╕ рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд╕ рд╕рд╛рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕реАрдзреЗ рдПрд╕реНрд╕реЗрдЯ рдХреЙрд▓рдмреИрдХ рдмрдирд╛рдо рдореНрдпреВрдЯрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд┐рд╕реНрдкреИрдЪ () рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рднрд▓реЗ рд╣реА рд╡реЗ рдЕрд╕рд┐рдВрд╕ рдХреЗ рд▓рд┐рдП рдПрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирдГ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рддрд░рд╣ рдХреЗ рдЕрдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдорд╡реАрд╕реА рдХреА рдПрдХ рдпрд╛рдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕реАрдПрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдмрдирд╛рдо рдПрдлрдПрд╕рдПрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рдмрджрд▓рд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

@vladar

(state, action) => (state, sideEffects)

рдмрд╕ рд╕реЛрдЪред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрдореНрдмрд┐рдиреЗрд╢рдирд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ [рд░рд╛рдЬреНрдп, рд╕рд╛рдЗрдбрдЗрдлрд╝реЗрдХреНрдЯреНрд╕] рдпрд╛ [рд░рд╛рдЬреНрдп, [рд╕рд╛рдЗрдбрдЗрдлрд╝реЗрдХреНрдЯреНрд╕]] рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд╛рдЗрдбрдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рд┐рдбреНрдпреВрд╕рд░ рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреЛрдб рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдореВрд▓ (рд░рд╛рдЬреНрдп, рдХреНрд░рд┐рдпрд╛) => рд░рд╛рдЬреНрдп reducer рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ CombReducers рд░рд╛рдЬреНрдп (рдпрд╛ рд░рд╛рдЬреНрдп), [] [] рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд░реЗрдВрдЧреЗред

рдлрд┐рд░ рд╣рдореЗрдВ Redux рдореЗрдВ рд╕рд╛рдЗрдбрдЗрдлрд╝реЗрдХреНрдЯреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ Store.dispatch () рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдирдП рд░рд╛рдЬреНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╛рдЗрдбрдЗрдлрд╝реЗрдХреНрдЯреНрд╕ рд╕реВрдЪреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЗрд╖рдг рдХрд░реЗрдЧрд╛ред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЕрдВрддрд╣реАрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реНрддрд░ рдкрд░ рдХрд╣реАрдВ рднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Store.dispatch рдХреЛ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдбрдЗрдлрд╝реЗрдХреНрдЯреНрд╕ рд╕реВрдЪреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

@vladar

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдлрд╝реНрд▓рдХреНрд╕ рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд╕ рд╕рд╛рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рд╕реАрдзреЗ рдПрд╕реНрд╕реЗрдЯ рдХреЙрд▓рдмреИрдХ рдмрдирд╛рдо рдореНрдпреВрдЯрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд┐рд╕реНрдкреИрдЪ () рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рднрд▓реЗ рд╣реА рд╡реЗ рдЕрд╕рд┐рдВрд╕ рдХреЗ рд▓рд┐рдП рдПрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирдГ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдПрдХ рддрд░рд╣ рдХреЗ рдЕрдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдорд╡реАрд╕реА рдХреА рдПрдХ рдпрд╛рдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕реАрдПрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдмрдирд╛рдо рдПрдлрдПрд╕рдПрдо рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рдмрджрд▓рд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ рдХрд┐ ActionCreators рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрдПрдХ рдЕрдЪреНрдЫреА рдорд╛рдирд╕рд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдорд╛рд░реНрдЧ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЕрдВрдд рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ рдПрдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ reducer рд╕реЗ рдПрд╕реА рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрд╕рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ AC, Async рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХрддрд░ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдХреА рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдХрд╣реАрдВ рдФрд░ рдХрд┐рдП рдЧрдП рдирд┐рд░реНрдгрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреНрд░реЙрд╕-рдХрдЯ рдбреЛрдореЗрди рдХреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХреА рднреВрдорд┐рдХрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддрд░реНрдХ рдХреЛ рд░реВрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ UI рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддрд░реНрдХ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ ActionCreators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╣рд▓рд╛ рдирд┐рд░реНрдгрдп Redux.state рдФрд░ / рдпрд╛ рдШрдЯрдХ рдХреА рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реЗрдмреИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгреА рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рддрд╛рдЬрд╝рд╛ рдХрд░рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рдЖрдкрдХреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЗрд╡ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддрдХрдиреАрдХреЛрдВ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ - рдХреНрдпрд╛ рдпрд╣ рдПрд╕реА рдореЗрдВ, рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ, рд╕реНрдорд╛рд░реНрдЯ рдШрдЯрдХ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреИрдЯрд░реНрди рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдЧрд╛ред

рдореИрдВ async рдХреЙрд▓ рдХреЛ рджреБрдХрд╛рдиреЛрдВ рд╕реЗ рджреВрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдЦрд░реАрдж рд░рд╣рд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдпрд╣ рдХрд╣реАрдВ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ рдореБрдЭреЗ рдХрд┐рд╕реА рд╕реНрдЯреЛрд░ / рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ async рдлрдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреА рдмрд╣реБрдд рдЬрдЯрд┐рд▓рддрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣рд╛рдБ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЗрд╖рдг - рдпрд╛ рд╢реБрджреНрдз рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╣реАрдВ рджреВрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдЕрднрд┐рдиреЗрддрд╛ рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ async рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рд╕рдВрджреЗрд╢ (рдПрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ) рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЕрдкрдиреЗ рдПрдлрдПрд╕рдПрдо рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред Async рдХреНрд░рд┐рдпрд╛рдПрдБ doc рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЪрд░реНрдЪрд╛рдПрдВ рдореЗрд░реЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рдирд╣реАрдВ рд▓рдЧрддреАрдВ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рд╣рдо рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддреЗред ;-)

@gaearon рдЖрдк

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рднреА рдбреЙрдХреНрд╕ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ рдХрд┐ рдЗрди рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ https://github.com/rackt/redux/issues/291#issuecomment -123010379 ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдзрд╛рдЧреЗ рд╕реЗ "рд╕рд╣реА" рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрд░рд╡рд╛рдИ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

рдПрдХреНрд╢рди рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЙрд▓ рд▓рдЧрд╛рдирд╛, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрд╢реБрджреНрдз рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рд░рдЦрдирд╛, рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдиреБрдХрд╕рд╛рди рд╣реИ: рдпрд╣ рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡реИрдк рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЬрд┐рддрдирд╛ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрдЯреЛрд░ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рдирд╛ред рд░рдЪрдирд╛рдХрд╛рд░ред рдореИрдВ рд╣рдореЗрд╢рд╛ async рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╢реБрджреНрдз рдХрд╛рд░реНрд░рд╡рд╛рдИ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реВрдВред

рдореИрдВ рдЬрд┐рд╕ рдРрдк рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдВрдЧреЗ: рдПрдХ рдЬреЛ рдПрдХ рдСрдирд╕рд╛рдЗрдЯ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛ рдПрдХ рдкреЛрд░реНрдЯрд▓ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреЛрд░реНрдЯрд▓ / рдкреЛрд░реНрдЯрд▓ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд╛рд╣реЗ рдореБрдЭреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдФрд░ рдореБрдЭреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╣реЛрдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░рд╛рдЬреНрдп рдХреЗ рдЕрджреНрдпрддрди рдкрд░ рдХреЗрдВрджреНрд░реАрдХреГрдд рдирд┐рдпрдВрддреНрд░рдг рдХреА рд░реЗрдбрдХреНрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рддрдереНрдп Redux рд╕реНрдЯреЛрд░ рдХреЗ рд░рд╛рдЬреНрдп рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рд╣реИ рдлрд┐рд░ рднреА, рдХреБрдЫ рдЖрдк рдкрд░ рд╕рдЯреАрдХ рдирд┐рдпрдВрддреНрд░рдг рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдкрд░ рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ рдХрд┐ Redux рд╕реНрдЯреЛрд░реНрд╕ / рд░реАрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рд╛рде, рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рддрд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реИред

@ jedwards1211 рдЖрдкрдХреЛ https://github.com/redux-effects/redux-effects рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде # 569 рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред

@gaearon рд╢рд╛рдВрдд, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдЕрдкрдиреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рддрдХ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ :)

рдореИрдВрдиреЗ рдПрд▓реНрдо рдЬреИрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрдирд╛рдпрд╛: рд░рд┐рдбрдХреНрд╕-рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ ред рдЖрд░рдИрдПрдбреАрдПрдордИ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рддреБрд▓рдирд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдХрд░рддрд╛ рд╣реИред

@gregwebs рдореБрдЭреЗ redux-side-effect , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реНрд╡реИрдкреЗрдмрд▓ рдХрдВрдЯреНрд░реЛрд▓ рд▓реЙрдЬрд┐рдХ рдХреЗ рд╕рд╛рде рднреА рдЕрдЬреАрдм рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ sideEffect рдлрдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдЬрдм рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдЯреЛрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ред

рдореИрдВ рдПрдХ рдЕрдЬреАрдм рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: рдмрд╕ sideEffect state рд╣реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ reducer рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ! :рдЬреАрдн рдЪрд┐рдврд╝рд╛рдирд╛ рдЖрдВрдЦ рдорд╛рд░рдирд╛:

Https://github.com/rackt/redux/pull/569/ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдЖрджрд░реНрд╢ рдХреЗ рдХрд░реАрдм рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рдмрди рдЬрд╛рддрд╛ред рдПрдкреАрдЖрдИ рдХреЗред

рдпрд╣рд╛рдБ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ: рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реНрдЯрд┐рдХ sideEffect рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдереЛрдбрд╝рд╛ рд╣реИрдХрд░реА, рд▓реЗрдХрд┐рди рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди async рдХреЛрдб рдЖрд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ:

sideEffectMiddleware.js :

export default store => next => action => {
  let sideEffects = [];
  action.sideEffect = callback => sideEffects.push(callback);
  let result = next(action);
  sideEffects.forEach(sideEffect => sideEffect(store));
  return result;
};

рд╕рд░рд▓ рдкрдХреНрд╖ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ

рдореИрдВрдиреЗ рдКрдкрд░ sideEffectMiddleware рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рд░рд┐рдлреИрдХреНрдЯ рдХрд┐рдпрд╛, рдФрд░ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рд╕рдВрдЧрдарди рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ reducers рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА sideEffect рдлрдВрдХреНрд╢рди рдЗрдореНрдкреЛрд░реНрдЯ рди рдХрд░реЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл action ред

@ jedwards1211 рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкреИрдХреЗрдЬ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 2.1.0 рдореЗрдВ actionSideEffectMiddleware рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред

@ рдХреВрд▓ рдХреВрд▓! рдПрдХ рд╕рд╣рдпреЛрдЧреА рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдорди?

@ jedwards1211 рдЖрдкрдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдЪрд┐рдд рд░реАрдкреНрд▓реЗ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВрдЧреЗ :) рдореИрдВ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@gaearon рдореИрдВ рдЗрд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░

рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд░реНрдЬ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╛рджреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЖрдорддреМрд░ рдкрд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@ рдЬрд┐рдпрд╛рд░реЛрди рд╣рдореНрдо ред рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди ... рдореИрдВ рдХреБрдЫ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдмрд┐рдЪреМрд▓рд┐рдпреЛрдВ рд░рд┐рдХреЙрд░реНрдб рддреЛрдбрд╝ рд╣реЛрдЧрд╛ / рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП redux-effects-fetch рд▓реЗрдВ, рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рд╛рджреЗ рд╡рд╕реНрддреБ FETCH рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкрд░ рдПрдХ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛:

function fetchMiddleware ({dispatch, getState}) {
  return next => action =>
    action.type === 'FETCH'
      ? fetch(action.payload.url, action.payload.params).then(checkStatus).then(deserialize, deserialize)
      : next(action)
}

рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдбрд░ FETCH рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ steps рд╕реЗ [success, failure] рдХреЙрд▓рдмреИрдХ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ, рддреЛ redux-effects рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд┐рд╕реА рднреА рд░рд╛рдЬреНрдп-рдкрд░рд┐рд╡рд░реНрддрдирдХрд╛рд░реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдПрдХ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдЧрд╛; рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреЗрд▓рдирд╛ред

рдХреНрдпрд╛ "рд╢реБрджреНрдз" рдорд┐рдбрд▓рд╡реЗрдпрд░ (рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрднреА рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ) рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ, рдЬреИрд╕реЗ "рдЕрд╢реБрджреНрдз" рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╕реЗ redux-logger (рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ)?

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВрдиреЗ redux-effects рдмрд╛рд░реАрдХреА рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред

рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд░ рдХрд┐рд╕реА рднреА рдЭрдВрдбреЗ рдХреЛ рдЙрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? рдореИрдВ рдмрд╕ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рднрдХреНрддреЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдпрд╣ рдирд╣реАрдВ рд╣реИ рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╡рд░реНрдзрдорд╛рди рд░рдЪрдирд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ devTools() _after_ applyMiddleware рдбрд╛рд▓рд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рдХреНрд░рд┐рдпрд╛ рдкреВрд░реА рд╣реЛ рдЬрд╛рдП, рдпрд╣ рдПрдХ "рдЕрдВрддрд┐рдо" рдХреНрд░рд┐рдпрд╛ рд╣реЛ, рдЬрд┐рд╕реЗ рдЖрдЧреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдУрд╣, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдПрдХ рд╕рд╛рдЗрдб рдЗрдлрд╝реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдПрдХреНрд╢рди рд╕реЗ рдХрд┐рд╕реА рднреА рдлреАрд▓реНрдб рдХреЛ рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ / рдЗрд╕реЗ рдЯреНрд╡реАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд░реАрдкреНрд▓реЗ рдкрд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рди рдХрд░реЗ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рджреЗрд╡ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо, рд╕рд╣реА?

рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдорд╣рд╛рди, рдореБрдЭреЗ рдЬреНрдЮрд╛рдирд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@gaearon @vladar @ jedwards1211 рдЖрдкрдХреЛ https://github.com/salsita/redux-side-effects рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ (state, action) => (state, sideEffects) рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ рдЯрдкрд▓ рд▓реМрдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп (рдЬреЛ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ) рдпрд╣ рдЙрдкрдЬ-рдкреНрд░рднрд╛рд╡ рдкреНрд░рднрд╛рд╡ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬрд▓реНрдж рд╣реА рдЦреЗрд▓рд╛, рд╣реЙрдЯ рд░реАрд▓ рдФрд░ рд░реАрдкреНрд▓реЗ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЕрдм рддрдХ рдХреЛрдИ рднреА redux рдлрд╝реАрдЪрд░ рдЯреВрдЯрд╛ рд╣реБрдЖ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реАрдирд┐рдпрд░ reduxers рдХреЛ рдХреБрдЫ рдорд┐рд▓ рдЬрд╛рдПред :)
рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд░рд┐рдбреНрдпреВрдХреНрд╕ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд░реВрдк

рдПрдХ рдЕрдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЛ рд░реЗрдбреНрдпреВрд╕рд░ рд╕реЗ рдЕрд▓рдЧ рд░рдЦрддрд╛ рд╣реИред

@gaearon рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ @minedeljkovic рдХрд╛ рдорддрд▓рдм рдерд╛

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд░рд┐рдбрдХреНрд╕ рд╕реНрдЯреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрд░реНрдХ рдХреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ reducers рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдПрдХ рдкреНрд░рднрд╛рд╡реА рдФрд░ рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд░рд╛рдЬреНрдп рдорд╢реАрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рднрд╛рд╡ (рд╕рдВрдХреНрд░рдордг рдХрд╛рд░реНрдпреЛрдВ рдЬрд┐рд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ ( рдПрд▓реНрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдкреНрд░рднрд╛рд╡ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреА рддрд░рд╣ рдмрд╣реБрдд)ред

рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдореБрдЦреНрдп рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ https://github.com/yelouafi/redux-saga/ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ рдХрд┐ redux-thunk рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреАрдиреА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред ред

https://github.com/salsita/redux-side-effects рджреВрд╕рд░реА рдУрд░ рдПрд▓реНрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рддрд░рд╣ рд╣реИред

рд╣рд╛рдВ, Redux-saga рдФрд░ Redux-side-effects рдХреНрд░рдорд╢рдГ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреНрд░рдорд╢рдГ рд╕рд╛рдЧрд╛ рдФрд░ рд░реАрдбреНрдпреВрд╕рд░ рдХреЛ рд╢реБрджреНрдз рд░рдЦрддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдорд╛рди рд╣реИред

рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ reducers рдореЗрдВ:

  1. рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рддрдХ рд╕реНрдкрд╖реНрдЯ рдкрд╣реБрдВрдЪ рд╣реИ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди @vladar рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛)
  2. рдХреЛрдИ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреЗрд╢ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ (Redux-saga рдореЗрдВ рд╕рд╛рдЧрд╛)

Https://github.com/rackt/redux/issues/1139#issuecomment -165419770 рдореЗрдВ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдЕрднреА рднреА redux-saga рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреЛрдИ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИ рд╕рд┐рд╡рд╛рдп рдореЙрдбрд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдПрд▓реНрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рд░реЗрдб-рд╕рд╛рдЗрдб-рдЗрдлрд╝реЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдмрд╛рддреЛрдВ рдкрд░ рдЬрд╝реЛрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ: https://gist.github.com/minedeljkovic/7347c0b528110889aa50

рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрднрд╡ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╕ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛" рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕ рдЪрд░реНрдЪрд╛ рд╕реЗ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХрд░рдг" рднрд╛рдЧ рд╣реИ рдЬрд╣рд╛рдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдиреНрдо рдХрд╛ рджреЗрд╢ рджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрдпрди "рджреЗрд╢ рдЪрдпрди" рд╕рдВрд╡рд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рджреЗрд╢ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪрдпрди рдХреА рдкреБрд╖реНрдЯрд┐ рдпрд╛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрдпрди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рджреЗрд╢ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдХрдореА:

  1. рдХрдВрдЯреНрд░реАрдмреНрдпреВрд╢рди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЙрдбреНрдпреВрд▓рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ( Redux ducks рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ), рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "рдЙрддреНрдкрд╛рдж рдкреНрд░рд╢рд╛рд╕рди" рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рднрд╛рдЧ рдореЗрдВ, рдЬрд╣рд╛рдВ рдЙрддреНрдкрд╛рджрди рдХрд╛ рджреЗрд╢ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)
  2. рджреЗрд╢ рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (Redux рд░рд╛рдЬреНрдп рдХреА рдЬрдбрд╝ рдореЗрдВ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд) рдЬреЛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣рд╛ рд╣реИред
  3. рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдореБрдЦреНрдп рддрд░реНрдХ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдЪрд▓рддреА рднрд╛рдЧреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдореЗрд░реЗ рдЬрд┐рд╕реНрдЯ рдореЗрдВ рдпрд╣ рдореВрд▓ рддрд░реНрдХ рдХреЗрд╡рд▓ рдФрд░ рдХреЗрд╡рд▓ рддрд░реНрдХ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рдЧ рдореЗрдВ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдШрдЯрдХ рддреБрдЪреНрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА Redux- рд╕рдВрдЪрд╛рд▓рд┐рдд рдШрдЯрдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣реЛ :)ред рдЙрдирдХреА рдПрдХрдорд╛рддреНрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рд╣реЛрдЧреАред)

рдЗрд╕ рдмрд╛рддрдЪреАрдд рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЬрд┐рд╕реНрдЯ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рджреЗрд╢ рдореЗрдВ рдЪрдпрди reducer CONFIRM_SELECTION рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред

@gaearon , рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдкрдиреЗ рдмрдпрд╛рди рдкрд░ рдЖрдкрдХреА рд░рд╛рдп рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдорд╛рдирдХ redux рдХреЗ рдЕрд▓рд╛рд╡рд╛ redux- рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд╕рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕рд░рд▓рддрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рддрд╣ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдЪрд╛рд░ (Redux-side-effects рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди redux-saga, redux-thunk рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдпрд╣ рднреА рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред

@ tomkis1 , рдореБрдЭреЗ рдЖрдкрдХреА рд░рд╛рдп рдпрд╣рд╛рдБ рдкрд╕рдВрдж

(рдЗрд╕ gist рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ https://gist.github.com/minedeljkovic/9d4495c7ac5203def688, рдЬрд╣рд╛рдВ GlobalActions рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЛрдИ рдЗрд╕ рдкреИрдЯрд░реНрди рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдЧрд╛)

@minedeljkovic рдЬреАрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реВрдВред redux-side-effects рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд▓реЗрдирджреЗрди рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП redux-saga рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред @slorber рдФрд░ @yelouafi рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд╢

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╕рдордХрд╛рд▓рд┐рдХ dispatching рд░рд┐рдбреНрдпреВрд╕рд░ (https://github.com/salsita/redux-side-effects/pull/9#issuecomment-165575751) рдХреЗ рднреАрддрд░ рдирдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛

yield dispatch => dispatch({type: COUNTRY_SELECTION_SUCCESS, payload: state.selectedCountryId});

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ @slorber "рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкрдХреНрд╖ рдкреНрд░рднрд╛рд╡" рд╢рдмреНрдж рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред redux-saga рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИред

@mindjuice рдореИрдВ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдкрд╕рдВрдж рд╣реИрдВ: https://github.com/paldepind/functional-frontend-Healthecture/issues/20#issuecunment -162822909

рдЧрд╛рдерд╛ рдкреИрдЯрд░реНрди рднреА рдХреБрдЫ рдирд┐рд╣рд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдлрд╛рдпрд░рд┐рдВрдЧ рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдХреНрдпрд╛ рд╣реБрдЖ (рдореИрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╡реЗ рдкрд┐рдЫрд▓реЗ рддрдирд╛рд╡ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ рдлрд┐рд░ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рдпреВрдЖрдИ рдХреЛ рдЕрдкрдбреЗрдЯ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд┐рд╣рд┐рдд рд╣реИред рдПрдХ рдЧрд╛рдерд╛ рдХреЗ рд╕рд╛рде, рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдкрд░, рдпрджрд┐ рдХреЛрдИ рджреЗрд╢ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ "NO_COUNTRY_SELECTED_ERROR_DISPLAYED" рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдкреНрд░реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЧрд╛рдерд╛ рдХреЛ рдмрддрдЦреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдпреБрдЧреНрдорди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рд╕реНрдерд╛рдиреАрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде duck1 рдФрд░ duck2 рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ 2 рдмрддреНрддрдЦреЛрдВ рдХреА рдЬреЛрдбрд╝реА рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдмрддреНрддрдЦ рджреВрд╕рд░реЗ рдмрддреНрддрдЦреЛрдВ рдХреЗ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реЛрдЧреА) рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛, рдФрд░ рдлрд┐рд░ рдПрдХ рд╕рд╛рдЧрд╛ рдмрдирд╛рдПрдВ рдЬреЛ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рдкрд╛рд░ рдирд┐рдпрдореЛрдВ рдХреЛ рддрд╛рд░-рддрд╛рд░ рдХрд░рддрд╛ рд╣реИред 2 рдмрддреНрддрдЦред

Sooooo, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдзрд╛рдЧрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдорд╛рди рд▓реАрдЬрд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ action() рдФрд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рдирд╛ рдерд╛

// the action call
action().then(dispatch(SUCCESS)).catch(dispatch(FAILURE))

// the reducer
case SUCCESS:
    state.succeeded = true
    alert('Success')

case FAILURE:
    state.succeeded = false
    alert('Failure')

рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ Redux-way рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм Reducer рдореЗрдВ "рджреБрд╖реНрдкреНрд░рднрд╛рд╡" рд╣реИрдВ (рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ)ред
рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА, рд╕рд╣реА рддрд░реАрдХрд╛ рдпреЗ рд╣реИ рдХрд┐ рдЗрди alert() рдХреЛ reducer рд╕реЗ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдирд╛ рд╣реИред

рдпрд╣ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ action рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рддреЛ рдЕрдм рдореЗрд░рд╛ рдХреЛрдб рджрд┐рдЦрддрд╛ рд╣реИ:

// the reducer
case SUCCESS:
    state.succeeded = true

case FAILURE:
    state.succeeded = false

// the React component
on_click: function()
{
    action().then
    ({
        dispatch(SUCCESS)

        alert('Success')
        // do something else. maybe call another action
    })
    .catch
    ({
        dispatch(FAILURE)

        alert('Failure')
        // do something else. maybe call another action
    })
}

рдХреНрдпрд╛ рдЕрдм рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?
рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдХреБрдЫ 3 рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

Redux рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдРрдкреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред Mabye рдПрдХ рдирдореВрдирд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░реЗрдкреЛ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджрд░реНрд╢рд╛рддреА рдПрдХ рд╡рд┐рд╣рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

@ рд╣рд╛рд▓реНрдЯ-рд╣реИрдореНрдЬрд╝рдирд┐рдЯ рд░реЗрдбрдХреНрд╕ рдиреЗ рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдмрдирд╛рдпрд╛; рднреНрд░рд╛рдордХ рд╡рд┐рдЦрдВрдбрди Redux рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп Reducers рд╕реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдХреЛ рдПрдХреАрдХреГрдд / рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдпрд╛ рд░рд╛рдп рд╕реЗ рдЖрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдЦрдВрдбрди рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк Redux рдХреЗ рд╕рд╛рде рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдореБрдЭреЗ рдЕрдкрдиреЗ рдореВрд▓ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 10 рд▓рд╛рдЗрдиреЗрдВ рд▓реЗ рдЧрдпрд╛ред рддреЛ рдЕрдкрдиреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЛ рдЧрд▓реЗ рд▓рдЧрд╛рдУ рдФрд░ "рд╕рд╣реА" рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛред

@ jedwards1211 "Redux рд╣реА" рдХрд╛ рдХреЛрдИ рдореВрд▓реНрдп рдпрд╛ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдлреНрд▓рдХреНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ AJAX, рд╕реБрдВрджрд░ рдПрдирд┐рдореЗрд╢рди рдФрд░ рдЕрдиреНрдп рд╕рднреА _ordinary рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд_ рд╕рд╛рдорд╛рди

@ рдкрдбрд╝рд╛рд╡-рд╣рдереМрдбрд╝реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд┐рдВрджреБ рд╣реИред Redux рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рдЕрджреНрдпрддрдиреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рд░реЗрдкреЛ рдореЗрдВ "рдЙрджрд╛рд╣рд░рдг" рдлрд╝реЛрд▓реНрдбрд░ рджреЗрдЦрд╛ рд╣реИ?

рдЬрдмрдХрд┐ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдпрд╣ рд╣реИ рдХрд┐ Redux рдХреЗ рдмрд╛рд╣рд░ рдпрд╛ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЗ рдЕрдВрджрд░, рдЬреИрд╕реЗ рд╣рдо рд╣рд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ ... рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдиреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдо рд╕рд╣рдорддрд┐ рдХреА рдХрдореА (рдХрдо рд╕реЗ рдХрдо рдпрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ) рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдердВрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕рд┐рд░реНрдл рдЖрдЙрдЯрд▓реЗрдпрд░ рд╣реИрдВред

^ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ред

рдореИрдВ рдПрдХ рдзрд░реНрдореА рд╕рдорд╛рдзрд╛рди рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╣рд╛рди рджрд┐рдорд╛рдЧреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛
рдФрд░ рдЗрд╕реЗ рдкрддреНрдерд░ рдореЗрдВ рдЙрдХреЗрд░рд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ 9000 рд╕реНрдХреНрд░реАрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рди рдкрдврд╝рдирд╛ рдкрдбрд╝реЗ
рдереНрд░реЗрдб

рдЧреБрд░реБрд╡рд╛рд░, 7 рдЬрдирд╡рд░реА 2016 рдХреЛ рдПрдВрдбреА рдПрдбрд╡рд░реНрдбреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @

рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ ... рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрдореА рд╣реИ
рдЖрдо рд╕рд╣рдорддрд┐ (рдХрдо рд╕реЗ рдХрдо рдпрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ) рдкрдХреНрд╖ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкреНрд░рднрд╛рд╡ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rackt/redux/issues/291#issuecomment -169751432

рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╣рдордд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдирд╛ рд╣реИ
рд░рдЪрдирд╛рдХрд╛рд░реЛрдВред рдореИрдВ, рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЦрд╛рдорд┐рдпрд╛рдВ рд╣реИрдВ
рдпрд╣ рдореИрдВ рдпрд╣рд╛рдБ рд╡рд╛рдкрд╕ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗ

рдЧреБрд░реБрд╡рд╛рд░ 7 рдЬрдирд╡рд░реА 2016 рдХреЛ, ╨Э╨╕╨║╨╛╨╗╨░╨╣ ╨Ъ╤Г╤З╤Г╨╝╨╛╨▓ [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

^ рдЙрд╕рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ред

рдореИрдВ рдПрдХ рдзрд░реНрдореА рд╕рдорд╛рдзрд╛рди рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╣рд╛рди рджрд┐рдорд╛рдЧреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛
рдФрд░ рдЗрд╕реЗ рдкрддреНрдерд░ рдореЗрдВ рдЙрдХреЗрд░рд╛ рддрд╛рдХрд┐ рдореБрдЭреЗ 9000 рд╕реНрдХреНрд░реАрдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рди рдкрдврд╝рдирд╛ рдкрдбрд╝реЗ
рдереНрд░реЗрдб

рдЧреБрд░реБрд╡рд╛рд░, 7 рдЬрдирд╡рд░реА 2016 рдХреЛ рдПрдВрдбреА рдПрдбрд╡рд░реНрдбреНрд╕ < рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
<_e i = "16">

рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ ... рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХрдореА рд╣реИ
рдЖрдо рд╕рд╣рдорддрд┐ (рдХрдо рд╕реЗ рдХрдо рдпрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ) рдкрдХреНрд╖ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдкреНрд░рднрд╛рд╡ред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rackt/redux/issues/291#issuecomment -169751432

рдпрд╣ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдзрд╛рдЧреЗ рдореМрдЬреВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ 1% Redux рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА / рд╢реБрджреНрдз / рдШреЛрд╖рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЛ рди рд▓реЗрдВ рдХрд┐ рдХреЛрдИ рднреА рдЙрд╕ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореВрдХ рдмрд╣реБрдордд рд╕реЛрдЪ рдФрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЦреБрд╢ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЯреЗрдХ рдХреА рддрд░рд╣ рдЗрд╕рдореЗрдВ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рдФрд░ рдЯреНрд░реЗрдбрдСрдл рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реНрдХ рд╣реИ, рддреЛ рдЖрдк Redux рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Rx рдХреЛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдбрдХреНрд╕ рдкреИрдЯрд░реНрди рдЖрд░рдПрдХреНрд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╣реИред

рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рдж

рдЧреБрд░реБрд╡рд╛рд░, 7 рдЬрдирд╡рд░реА, 2016 рдХреЛ, рджрд╛рди рдЕрдмреНрд░рд╛рдореЛрд╡ рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпрд╣ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдзрд╛рдЧреЗ рдореМрдЬреВрдж рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ 1% Redux рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА / рд╢реБрджреНрдз / рдШреЛрд╖рдгрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рдиред рдХреГрдкрдпрд╛ рдирд╣реАрдВ
рдпрд╣ рдзрд╛рд░рдгрд╛ рд▓реЗрдВ рдХрд┐ рдХреЛрдИ рднреА рдЙрд╕ рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореМрди рдмрд╣реБрдордд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рд╕реЛрдЪрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЦреБрд╢ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣
рдЯреЗрдХ рдореЗрдВ рдпрд╣ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рдФрд░ рдЯреНрд░реЗрдбрдСрдл рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реНрдХ рд╣реИ
рдЖрдк Redux рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Rx рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ Redux рдкреИрдЯрд░реНрди рд╣реИ
рдЖрд░рдПрдХреНрд╕ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/rackt/redux/issues/291#issuecomment -169761410

@gaearon рд╣рд╛рдБ, рддреБрдо рд╕рд╣реА рд╣реЛред рдФрд░ рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ Redux рд╣рдорд╛рд░реЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛ рд╣реИ!

@ рдкрдбрд╝рд╛рд╡-рд╣рдереМрдбрд╝реА рдореЗрд░реЗ рдЬрд╡рд╛рдм рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдБ рдХрд┐ Redux-saga Redux-thunk рд╕реЗ рдмреЗрд╣рддрд░ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: http://stackoverflow.com/questions/34570758/why-do-we-weed-middleware-for- async-рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ redux / 34599594

@gaearon рд╡реИрд╕реЗ,
http://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in-redux/34599594#34599594
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬрд▓реНрджреА рд╕реЗ AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВ: рдЙрдиреНрд╣реЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЖрдкрдХреА рд╕рд▓рд╛рд╣ рд╕рд┐рд░реНрдл dispatch рдХреБрдЫ рдЕрдиреНрдп рдШрдЯрдирд╛ рд╣реИ рдФрд░ рдпрд╣реА рд╣реИред
рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореЗрд░рд╛ рдХреЛрдб alert() рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?
рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ thunk s рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡рд╛рджреЗ рдХрд░реЗрдВрдЧреЗред
рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ redux-saga рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╕рдиреНрди рдЯрд┐рдкреНрдкрдгреА рдкрдврд╝реА рд╣реИред
рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдпреЛрдЧреНрдпред
рдореИрдВ monads рдЪреАрдЬрд╝ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ thunk рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдЕрдЬреАрдм рд╢рдмреНрдж рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рддрдм рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВред

рд╣рдо рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдбреЙрдХреНрд╕ рдХреЗ рджреМрд░рд╛рди рдереНрд░рдХреНрд╕ рд╕реЗ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред

@gaearon рд╣рд╛рдБ, рдпрд╣реА рддреЛ рдореИрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ: on_click() { dispatch(load_stuff()).then(show_modal('done')) }
рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХреГрдкрдпрд╛ Redux-thunk рдХреА README рджреЗрдЦреЗрдВред
рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ "рд░рдЪрдирд╛" рдЕрдиреБрднрд╛рдЧ рдХреЗ рддрд╣рдд рдерди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдХреЛ рдХреИрд╕реЗ рдЪреЗрди рдХрд░рдирд╛ рд╣реИред

@gaearon рд╣рд╛рдБ, рдареАрдХ рдпрд╣реА рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

store.dispatch(
  makeASandwichWithSecretSauce('My wife')
).then(() => {
  console.log('Done!');
});

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ:

on_click()
{
    dispatch(load_stuff())
        .then(() => show_modal('done'))
        .catch(() => show_error('not done'))
}

рд╡рд╣ README рд╕реЗрдХреНрд╢рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, thx

рдирд╣реАрдВ, рдпрд╣ рдореЗрд░реА рдмрд╛рдд рдирд╣реАрдВ рдереАред makeSandwichesForEverybody рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣ рдПрдХ рдардЧ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдердВрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ async рдЙрджрд╛рд╣рд░рдг рднреА рджреЗрдЦреЗрдВред

@gaearon рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ рдореЗрд░рд╛ рдлреИрдВрд╕реА рдПрдирд┐рдореЗрд╢рди рдХреЛрдб рдбрд╛рд▓рдирд╛, рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

button_on_click()
{
    this.props.dispatch(load_stuff())
        .then(() =>
        {
                const modal = ReactDOM.getDOMNode(this.refs.modal)
                jQuery(modal).fancy_animation(1200 /* ms */)
                setTimeout(() => jQuery.animate(modal, { background: 'red' }), 1500 /* ms */)
        })
        .catch(() =>
        {
                alert('Failed to bypass the root mainframe protocol to override the function call on the hyperthread's secondary firewall')
        })
}

рдЖрдк рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ?

@ рдкрдбрд╝рд╛рд╡-рд╣рдереМрдбрд╝реЗ рд╕реЗ рдЖрдк рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдШрдЯрдХ рд╕реНрдерд╛рдиреАрдп рдШрдЯрдХ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕реНрдкрд┐рдирд░ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рджрд┐рдЦрд╛ рд╕рдХреЗ (рд╡реИрд╕реЗ рднреА jquery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди)

рдЕрдиреНрдпрдерд╛ рдЖрдк рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рдХреЗ рд╕рд╛рде рдПрдирд┐рдореЗрд╢рди рдбреНрд░рд╛рдЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЯрд╛рдЗрдорд░ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ: http://jaysoo.ca/2016/01/03/managing-processes-in-redux-using-sagas/

рдУрд╣, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ рдШрдЯрдХ рдореЗрдВ рд░рдЦрдирд╛ рдареАрдХ рд╣реИред
(рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдо рддреМрд░ рдкрд░ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдпрд╣ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдШреЛрд╖рдгрд╛рддреНрдордХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ jQuery рдХреЗ рд╕рд╛рде рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдореЙрдбрд▓ рджрд┐рдЦрд╛рдП рдЬрд╛рдПрдВред рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред)

@slorber рд╣рд╛рдБ, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ "рдереНрд░рдХреНрд╕" (рдпрд╛ рдЬреЛ рднреА рдЖрдк рдЙрдиреНрд╣реЗрдВ рдлреЛрди рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдкреНрд░реЙрдорд┐рд╕ рдФрд░ рд╕рд╛рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд╢рдмреНрдж рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрдкрд┐рдирд░реЛрдВ рдФрд░ рдРрд╕реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВред

@gaearon рдареАрдХ рд╣реИ, рдореИрдВ рддреБрдореНрд╣реЗрдВ рдорд┐рд▓ рдЧрдпрд╛ред рдЖрджрд░реНрд╢ рдорд╢реАрдирд░реА рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рдЕрдВрджрд░ рд░рд╣рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреА рдЕрдкрдиреА рдорд╛рдВрдЧреЗрдВ рд╣реИрдВ, рддрд░реНрдХрд╣реАрди, рдХрд╣рдирд╛, рдПрдХ рдорд╢реАрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗред рд▓реЛрдЧ рддрд░реНрдХрд╣реАрди рдкреНрд░рд╛рдгреА рд╣реИрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рд╢реБрджреНрдз рд╢реВрдиреНрдп рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рддрд░реНрдХрд╣реАрди рд╕рд╛рдорд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдХреЛрдб рд╕реМрдВрджрд░реНрдп рдФрд░ рд╢реБрджреНрдзрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╕рдорд░реНрдерди рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реВрдВред рдореЗрд░реА рд╢рдВрдХрд╛ рдХрд╛ рдЕрдм рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирдИ рдЪрд░реНрдЪрд╛: https://github.com/reactjs/redux/issues/1528

@ рдмреЗрдпрд░реЙрди рдмрд╣реБрдд рднрдпрд╛рдирдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг! : рдЯреНрд░реЙрдлреА: рдзрдиреНрдпрд╡рд╛рдж: +1:

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

vraa picture vraa  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ramakay picture ramakay  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

parallelthought picture parallelthought  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

captbaritone picture captbaritone  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CellOcean picture CellOcean  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ