рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдпрд╛ рдореИрдВ рдЧрд▓рдд рдПрд╕рдПрдордПрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?
let initialState = immutable.fromJS({some_store: "some initial data"});
const redux = createRedux(stores, initialState);
...
export function some_store(state, action) {
// state is undefined here
}
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ
// stores/some-store.js
import Immutable from 'immutable'
const { Map, List, fromJS } = Immutable
const initialState = Map({
foo: 'bar',
fooList: List()
})
export function someStore (state = initialState, action) {
if (action.type === 'FOO') {
return state.set('foo', fromJS(action.foo))
}
if (action.type === 'FOO_LIST') {
return state.set('fooList', fromJS(action.fooList))
}
return state
}
// stores/index.js
export { default as someStore } from './some-store'
// application.js
import * as stores from './stores'
const redux = createRedux(stores)
рдЖрдкрдХреЛ рд╕реНрдЯреЛрд░реЛрдВ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ @emmenko рдиреЗ рджрд┐рдЦрд╛рдпрд╛ред
initialState
рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдпрд╛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рд░рд╛рдЬреНрдп рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред ( @acdlite , рд╣рдо рдЗрд╕реЗ рдбреЙрдХреНрд╕ рдореЗрдВ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред)
рдЙрд╕рдиреЗ рдХрд╣рд╛, рдЖрдкрдиреЗ рдЬреЛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╡рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдирд╣реАрдВ, рдореИрдВрдиреЗ рдЬреЛ рдХреЛрд╢рд┐рд╢ рдХреА рд╡рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рджреБрдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕рднреА рджреБрдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╢реБрд░реБрдЖрддреА рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИред
рдлрд┐рд░ рднреА, рдЕрдЧрд░ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЦреБрд▓рд╛ рд░рдЦреЗрдВ? рдореИрдВ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рдлрд┐рд░ рдШреВрдореВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╕рдорд╕реНрдпрд╛ composeStores
рд╣реИ рдЬреЛ рдорд╛рди рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬрдбрд╝ рд░рд╛рдЬреНрдп рдПрдХ рд╕рд╛рджрд╛ JS рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ state[key]
рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реИ, рдЬреЛ Immutable.Map
рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Immutable.Record
рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рдпрдорд┐рдд рдЬреЗрдПрд╕ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЗрддреЛрдВ рдХреЛ рд╕реБрд▓рдн рдмрдирд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп рд╕реНрдерд╛рди рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╡рд╕реНрддреБ рд╣реИред
рдУрд╣ред рдпрд╣ рдПрдХ рдорд╣рд╛рди рдкрдХрдбрд╝ рд╣реИ! рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рд╕рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ: isPlainObject(Immutable.Record) === false
ред
@pierregm рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рд╣реИред рдпрджрд┐ рдпрд╣ рдШрдЯрдХ рдЧреБрдг рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдЧреБрдг рдлреИрд▓рд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ рдХрд┐ рдЖрдк select={state => state.get('something').toJS()}
рд▓рд┐рдЦреЗрдВред
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛,
// store
const initialState = Immutable.fromJS({}).toOrderedMap();
export default function streamStore(state = initialState, action) {
switch (action.type) {
case actionTypes.FETCH_STREAM_DONE:
var streamMap = {};
for (var i in action.stream_data) {
var item = action.stream_data[i];
streamMap[item.id] = item;
}
return state.merge(Immutable.fromJS(streamMap).toOrderedMap());
default:
return state
}
};
// select
function select(state) {
return {stream: state.stream.toList()}
}
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдЯреНрд░реАрдо (рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп) рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреБрдЫ рдРрд╕рд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреЛрд░ рд╕реНрддрд░ рдкрд░ рдкреБрд░рд╛рдиреЗ рд░рд╛рдЬреНрдп рдмрдирд╛рдо рдирдП рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЕрдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред NuclearJS рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИред Redux рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
@owais
Reselect рджреЗрдЦреЗрдВ: https://github.com/faassen/reselect рдпрд╣ NuclearJS рдЧреЗрдЯрд░реНрд╕ рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
@ рдмреЗрдпрд░рди рдХреВрд▓! ReactEurope BTW рдкрд░ рд╢рд╛рдирджрд╛рд░ рдмрд╛рддрдЪреАрдд! рдзрдиреНрдпрд╡рд╛рджред
рдпрд╣ рдореЗрд░реА рдХреЛрд╢рд┐рд╢ рд╣реИ рдХрд┐ Redux 1.0.0, https://github.com/gajus/redux-immable рдХреЗ рд╕рд╛рде Immutable.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП
рдЕрдЪреНрдЫрд╛ @ рдЧрдЬрд╕! рдкрд░реАрдХреНрд╖рдг redux-immutable
рдЕрднреА рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ https://github.com/gajus/canonical-reducer-composition рдкреИрдЯрд░реНрди рдХреЛ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реИ
рд╕рд╛рднрд╛рд░ @chiplay рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЛ рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрдпрд╛ redux рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рд╣реИ? рдЬрдм Redux рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕реНрдЯреЛрд░ рд░рд╛рдЬреНрдп рдХреА рдирдИ рдкреНрд░рддрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ)? рдкреНрд░рджрд░реНрд╢рди (рдХреЛрдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ?) рдпрд╛ рдХреБрдЫ рдФрд░? рдзрдиреНрдпрд╡рд╛рдж
@jsifalda
Redux рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо:
Redux рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рдкрдХреНрд╖:
рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ!
@gaearon
рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдФрд░ рдЙрдкрдпреЛрдЧреА рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдпрджрд┐ рдЖрдк ImmutableJs рдФрд░ Redux рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ Redux рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рддреЛ рдЖрдк https://github.com/indexiatech/redux-immutablejs рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ,
@gaearon рдХреНрдпрд╛ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдкрд░ рд▓рд┐рдВрдХ рдбрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
рдереИрдВрдХ рдпреВ рдЖрд╕рдл рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред
4 рд╕рд┐рддрдВрдмрд░, 2015 рдХреЛ, 18:36 рдкрд░, рдЖрд╕рдл рд╢рдХрд░рдЪреА рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдпрджрд┐ рдЖрдк ImmutableJs рдФрд░ Redux рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ Redux рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рддреЛ рдЖрдк https://github.com/indexiatech/redux-immutablejs рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ,
@gaearon рдХреНрдпрд╛ рд╡реЗрдм рд╕рд╛рдЗрдЯ рдкрд░ рд▓рд┐рдВрдХ рдбрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВред
@asaf
рдЕрдЪреНрдЫрд╛ рд╕рд╛рдорд╛рди, рдХреНрдпрд╛ рдЖрдк Ecosystem.md
PR рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЦреБрд╢реА рд╕реЗ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред
рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде @gaearon рд╕рдВрдкрдиреНрди, PR рд╣реИ: https://github.com/rackt/redux/pull/707
рдзрдиреНрдпрд╡рд╛рдж!
рдирдорд╕реНрддреЗ,
@gaearon рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреНрд░рд╢реНрди, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рд░рд┐рдПрдХреНрдЯ / Redux рдРрдк рдкрд░
рдореВрд▓ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛: рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ ...
рдореЗрд░реЗ reducer рд╕реЗ,
рдмрд┐рдирд╛ ImmutableJS:
const initialStore = {
isLoading : false,
error : null,
data : []
}
// in the switch case
return {
...state,
isLoading: false,
error: null,
data: action.result
}
ImmutableJS рдХреЗ рд╕рд╛рде
const initialStore = Map({
isLoading : false,
error : null,
data : List()
})
// in the handler function
return state.merge({
isLoading: false,
error: null,
data: List(result.result)
})
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ "рдЗрд▓рд╛рдЬ" ImmutableJS рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рд▓рд╛рдЧрдд рдирд╣реАрдВ рд╣реИ?
рдХреНрдпрд╛ рдореИрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓рд╛рдн рддрдм рдЕрдзрд┐рдХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд░реЗрдВрдбрд░рд┐рдВрдЧ рддреНрд╡рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдЖрдкрдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдХрдо рдореЗрдореЛрд░реА рдЦрд░реНрдЪ рд╣реЛрддреА рд╣реИ рдФрд░ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рджред
рддреЛ рдореИрдВ рд╡реИрд╕реЗ рднреА рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ?
рд╣рд╛рдБ, рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдЕрдм рддрдХ рдХрд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рд╣реЛ рдЪреБрдХрд╛ рд╣реИред the
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@jsifalda
Redux рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдо:
Redux рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рдкрдХреНрд╖:
рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ!