дочернее приложение в качестве пакета npm не выполняет повторную передачу

#reactjs #react-redux #react-router

#reactjs #реагировать-redux #react-маршрутизатор

Вопрос:

У меня есть родительское приложение, которое загружает дочернее приложение, созданное как отдельный пакет npm. При изменении состояния дочернего приложения ( MyComponent ) родительское приложение не выполняет повторный запуск, вызывая некоторую «блокировку повторного запуска» для дочернего приложения.

 // parent app
// package.json
"my-child-app": "^0.1.0"

// ChildApp.jsx
import ChildApp from "my-child-app";
...
render() {
  return <ChildApp appHistory={history} />;
}

// child app
render() {
  const { history } = createHistory(this.props.appHistory);
  return (
    <Provider store={store}>
      <PersistGate loading={null} persistor={persistor}>
        <Router history={history}>
          <Switch>
            <Route path="*" component={MyComponent} />
          </Switch>
        </Router>
      </PersistGate>
    </Provider>
  );
}
  

Проблема связана с маршрутами? Или что-то еще?

Комментарии:

1. Почему родительский компонент должен выполнять повторный рендеринг, если состояние дочернего компонента изменено?

2. @FortyTwo проблема в том, что родительский сервер не выполняет повторный рендеринг при изменении состояния дочернего устройства, и это блокирует повторный рендеринг дочернего устройства. Так что, возможно, родительскому приложению не требуется повторный рендеринг, но тогда я не уверен, почему дочерний не выполняет повторный рендеринг. Дочернее приложение отлично работает само по себе, но когда оно импортируется внутрь родительского, дочернее приложение не работает.

Ответ №1:

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

 this.forceUpdate()
  

Ответ №2:

Я нашел проблему. Оказывается, конфигурация webpack в родительском приложении имела:

 {
  ...
  devServer: {
    watchOptions: {
      poll: false
    }
  }
}