Реакция: Портал вызова функций не содержит цели - PullRequest
1 голос
/ 02 апреля 2019

у нас возникла проблема, что useReducer закрывает портал в нашем приложении, и мы не можем контролировать его поведение.https://codesandbox.io/s/724ozpxxk1 Как видите, при нажатии на триггер открывается <Portal /> и добавляется handleOutsideMouseClick.Когда вы нажимаете на первую строку, обработчик правильно проверяет, является ли выбранная цель дочерним элементом портала.Но как только вы отправляете действие, переданное от отца, он не распознает, что выбранная цель является дочерним элементом портала.

Здесь она передается как опора, поэтому Context (Provider / Consumer) не являетсяпроблема.https://codesandbox.io/s/mj7y4v2mnj

И здесь его useState передается как опора, поэтому я не знаю, где искать дальше ... https://codesandbox.io/s/74860klz3j

1 Ответ

0 голосов
/ 03 апреля 2019

Проблема в вашем случае заключается в том, что вы визуализируете компонент Trigger непосредственно в компоненте приложения, который будет повторно визуализироваться при изменении значения содержимого или состояния редуктора, и из-за этого некоторые другие ваши логические средства обрабатывают открытое состояние портала. не удается, что приводит к закрытию вашего портала. Рендеринг вашего компонента, как показано ниже, работает

const App = ({ children }) => {
  const [state, dispatch] = useReducer(reducer, { foo: "bar" });

  const appContextValue = useMemo(
    () => ({
      ...state,
      dispatch
    }),
    [state.foo]
  );

  return (
    <AppContext.Provider value={appContextValue}>
      {children}
    </AppContext.Provider>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(
  <App>
    <Trigger overlay={<Overlay />}>
      <div>trigger</div>
    </Trigger>
  </App>,
  rootElement
);

Рабочая демоверсия

...