Это полностью зависит от ситуации. Я бы предложил разделить ваши компоненты на 2 части:
- Компоненты, которые могут быть повторно использованы в других проектах
- (более высокий уровень) Компоненты, которые настолько специфичны для этого проекта, что, вероятно, никогда не будут использованы повторно.
Для компонентов категории 1 я бы предложил не использовать хранилище mobx напрямую, а вместо этого создавать чисто реагирующие компоненты. (например, подумайте о раскрывающемся списке или компоненте раскрывающегося списка ajax).
Для компонентов второй части (например, заголовок, нижний колонтитул, компоненты раздела, специфичные для вашего сайта). просто заставьте их напрямую взаимодействовать с хранилищем Mobx, чтобы вы могли быстрее кодировать то, что вам нужно (вместо того, чтобы постоянно поддерживать все).
дополнение
Для компонентов категории 1 вы всегда можете обернуть их методом @inject()
. Таким образом, например, вы можете превратить выпадающий компонент в компонент UserDropdown, который использует хранилище mobx для своего состояния. (Метод inject внедряет состояние mobx как реквизиты в компоненте).
const UserDropDownComponent = mobx.inject(stores => ({users: stores.userStore.users}))(DropDownComponent);
// usage:
<UserDropDownComponent />
Внимание
Для чистых компонентов не всегда видны изменения состояния mobx. Чтобы исправить это, вам нужно обернуть компонент в аннотацию @observe
. Или вы должны ввести реквизит, обернув его в: mobx.toJS(yourMobxStateProperty)