Как связать параметры запроса реагирующего маршрутизатора с глобальным состоянием mobx? - PullRequest
0 голосов
/ 24 июня 2019

Я создаю веб-клиент, используя create-реагировать-приложение, mobx-реагировать-lite и реагировать-маршрутизатор-дом.Как я могу подключить параметры запроса маршрутов к состоянию mobx?

Я использую хуки, поэтому я попытался использовать хук useEffect () с функцией mobx autorun () и обернул мои компоненты в хук useAsObservableSource () (так же, какздесь предлагается https://mobx -react.js.org / recipes-Effects ), и он работает нормально, пока я использую простые параметры, но если это массив, эффект идет в бесконечный цикл.

const Index = props => {
  const store = useStore(); // my mobx global state store
  const source = useAsObservableSource(props);

  useEffect(() => autorun(() => {
    // extracting url query params
    const params = new URLSearchParams(source.location.search);
    const tags = params.getAll('tags'); // an array ['4', '6', etc.]
    const orderBy = params.get('orderBy') || 'date'; // a string
    store.orderBy = orderBy; // works fine
    store.tags = tags; // works only first time, when open in new browser window, if query string changes, causes infinite rerenders

    store.fetchSomeData();
  }),
  []);

  return (
    <Observer>{() => (
      <div>
        // render components based on store
      </div>
    )}</Observer>
  );
};

Ожидается, что эффект будет запускаться только один раз при каждом изменении строки запроса, но он выполняется бесконечное количество раз при каждом изменении строки запроса.

...