Мне любопытно, что является хорошей практикой для рендеринга компонента и как его повторно отображать, чтобы получить обновленный магазин.
Например, в настоящий момент в проекте есть хранилище, которое прослушивает react-router и сохраняет текущее местоположение.
Магазин
export default (initialState = {slidesData}) => {
const store = createStore(
makeRootReducer(),
initialState
)
store.asyncReducers = {}
store.unsubscribeHistory = hashHistory.listen(updateLocation(store));
if (module.hot) {
module.hot.accept('./reducers', () => {
const reducers = require('./reducers').default
store.dispatch(reducers(store.asyncReducers))
})
}
return store
}
Редуктор местоположения
export const LOCATION_CHANGE = 'LOCATION_CHANGE';
const hash = '/#/',
browser = '/';
// Action
export function locationChange (location = hash) {
return {
type: LOCATION_CHANGE,
payload: location
}
}
// Action creator
export const updateLocation = ({ dispatch }) => {
return (nextLocation) => dispatch(locationChange(nextLocation))
}
// Reducer
const initialState = null;
export default function locationReducer (state = initialState, action) {
return action.type === LOCATION_CHANGE
? action.payload
: state
}
Таким образом, при первой загрузке приложения компоненты, подписанные на хранилище, получают initialState = null
, а когда происходит первое изменение маршрута, обновления хранилища и компоненты теперь получают "/current-route"
.
Не могли бы вы поделиться своими мыслями о том, что можно сделать, чтобы получить "current-route"
до того, как компоненты, которые на него подписаны, получат null
.
Или как обрабатывать рендеринг компонентов, если они получают null
и инициируют повторный рендеринг, чтобы отобразить обновленный магазин?