Как сделать так, чтобы компонент с подключенным редуктором реагировал на действия, отправленные за пределы реактора - PullRequest
0 голосов
/ 04 июля 2018

У меня есть файл действий

import keyMirror from 'keymirror';

export const actionTypes = keyMirror({
 OPEN_LIGHTBOX: null,
 CLOSED_LIGHTBOX: null
});

export const openLightbox = (closable = false) => ({
 type: 'OPEN_LIGHTBOX',
 payload: {lightboxOpen: true, lightboxClosable: closable}
});

и редуктор, я не собираюсь помещать код здесь, потому что он не кажется необходимым. В любом случае это работает.

У меня есть реактивный компонент, который говорит

module.exports = connect((state) => {
    console.log('state change'); // eslint-disable-line no-console
    console.log(state); // eslint-disable-line no-console
    return {
      findShopDomainData: state.findShopDomain
    }
  })(Autocomplete);

Я могу зарегистрировать изменения состояния внутри реагирующего компонента, я получаю операторские сообщения в консоли.

Но у меня также есть вещи вне реакции, которые должны вызывать эти избыточные действия. Поэтому я импортирую в файл JS.

import { createStore } from 'redux';
import { findShopDomain } from 'path to reducer file happens here'
import { openLightbox } from  'path to action file'

тогда я

let reduxStore = createStore(findShopDomain);
reduxStore.dispatch(openLightbox(true));

Если я выполняю это действие в моем vanilla js-файле, я попадаю в редуктор, но изменение состояния никогда не регистрируется в моем подключенном компоненте React. Я предполагаю, что это потому, что функция соединения, вероятно, превращает его в новый редуктор, и, по сути, у меня фактически есть два редуктора, которые не будут влиять друг на друга.

Во всяком случае, мне бы очень хотелось, чтобы каким-то образом был reduxStore.dispatch (openLightbox (true)); в моей ванили JS будет зарегистрирован моим компонентом реакции.

1 Ответ

0 голосов
/ 04 июля 2018

Использование глобальной области видимости window.store = createStore(findShopDomain); window.store.dispatch(openLightbox(true))

...