#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
}
}
}