AN
Size: a a a
AN
AN
onMouseOver={this.hoverTaskPreview}
hoverTaskPreview = (e) => {
e.clientX
};//
//
DK
DK
//
NK
NK
NK
import { createStore, applyMiddleware } from "redux";
import { reducer } from "./reducers";
import thunk from "redux-thunk";
import { Store } from "react-redux";
/// TODO remove 'redux-devtools-extension'.
import { devToolsEnhancer } from 'redux-devtools-extension';
const enhancer = window['devToolsExtension'] ? window['devToolsExtension']()(createStore) : createStore;
export const create = <S> ( state = {}, container = {} ): Store<S> =>
enhancer(
reducer,
state,
devToolsEnhancer(applyMiddleware( thunk.withExtraArgument( container ) ) as any)
) as Store<S>;ЮЧ
ЮЧ
AG
ЮЧ
NK
NK
ЮЧ
middleware и позволяет вернуть из экшена функцию с двумя аргументами (dispatch, getState).dispatch-у столько экшенов, сколько нужно. Очень часто такое нужно для асинхронных событий, например, начало сетевого запроса, успешный ответ, ответ с ошибкой.NK
NK
AK
redux-batch или redux-batched-actions - они позволяют эту проблему решить, отправляя обновление в конце цепочки.reselect и shallow compare по props компонента в shouldComponentUpdate()), если составлять хранилище таким образом, чтобы искомый reducer содержал флаг наподобие isFetching, который бы сигнализировал загрузку в текущий момент. Флаг присутствует - игнорируем перерисовку в shouldComponentUpdate() и не прибегаем к shallow compare.