В соответствии с этим Redux FAQ: Можно или нужно создать несколько магазинов? Могу ли я напрямую импортировать свой магазин и использовать его в компонентах? , не следует импортировать их непосредственно для использования.
В React Components мы могли бы использовать оболочку connect
.
У меня есть клиент, с которым я хочу управлять всеми коммуникациями и логами c, касающимися сторонних услуг. В идеале этот клиент мог бы отправлять и читать состояние из хранилища.
Чтобы избежать прямого импорта хранилища, я планирую использовать thunk и выполнить следующие действия:
Action Creator :
export function initializeClient() {
return async (dispatch, getState) => {
const { token } = await Api.createToken();
return Client.initialize(token, dispatch, getState);
}
}
Внутри клиента я бы по сути сделал это:
Клиент
class Client {
dispatch;
getState;
async initializeClient(token, dispatch, getState) {
this.dispatch = dispatch;
this.getState = getState;
// Process token
}
// Other functions...
}
То, что я сделал, могло бы быть анти-паттерн, но я чувствую, что он позволил бы ему по-прежнему выполнять рендеринг на стороне сервера и проходит через импорт магазина напрямую.
Моя самая большая проблема - хранить ссылку на dispatch и getState так долго, но я не могу себе представить, что функции когда-либо изменятся ... так что я думаю, что это должно быть хорошо?