Я искал по всей сети, чтобы решить эту рекурсивную проблему, но ничего не смог найти ... В большинстве случаев эта проблема возникает при вызове setState () в функции didUpdate (), но это не мой случай.
Изначально я использовал реактив v15, мое приложение хорошо работало как в средах, так и в разработке и на производстве.
В последнее время я решил перейти на версию v16, а также перейти на узел 8.12.0.
На этом этапе мое приложение работало отлично, когда NODE_ENV = разработка, но когда я развернул в производственной среде (NODE_ENV = изготовление), я начал сталкиваться с этой странной проблемой в консоли моего браузера Chrome
Я обнаружил, что если я отреагирую на версию 15, мое приложение снова начнет работать в рабочей среде.
В ходе моего расследования я проверил это, отправляя слишком много действий, вызывающих это "«Превышен максимальный размер стека вызовов».
Почему мой код работает нормально, когда NODE_DEVELOPMENT, и аварийно завершает работу при производстве NODE_ENV?
Может кто-нибудь помочь мне?
Пожалуйста, найдитемой код: ContainerPage.js
class ContainerPage extends Component {
constructor(props) {
super(props);
const { locale } = props;
moment.locale(locale);
}
componentDidMount() {
const {
getGeometry,
getCountries,
getNodes,
geometry = [],
location: { query = {} } = {},
} = this.props;
const { INIT_CORPORATION_TREE } = actions;
if (geometry.length === 0) {
getCountries();
getGeometry();
}
getNodes(
{
action: INIT_CORPORATION_TREE,
corporationIdQuery: !isEmpty(query) ? query.corporationId : null,
});
}
render() {
const { content,
children,
header,
commonProfileSetup,
selectedCorporation = {},
riskConfig: { riskConfigInitialized = false } = {},
} = this.props;
if (!isEmpty(selectedCorporation.id) && riskConfigInitialized) {
return (
<Col md={12}>
{content || children}
</Col>
);
}
return <div>test</div>;
}
}
export default withRouter(ContainerPage);
Routes.js
export default (
<Route component={App} onChange={scrollToTop}>
<Route path="/nui">
<Redirect
from={config.nui.baseUrl}
to={config.nui.baseUrl + '/search'}
/>
<Route
key="locate"
path="locate"
component={NuiPageContainer}
>
<Route getResponseHeaders={() => ({ 'X-Frame-Options': 'DENY' })}
component={UserIsAuthorized(ContainerPage)}>
<Route
path="search"
getComponents={(loc, cb) => {
require.ensure([], require => {
cb(null, {
header: () => <Header titleId="title._dynamic.search" />,
//commonProfileSetup: () => <CommonProfileSetup pageReducer="search" treeReducer="corporationTree" showTree />,
//content: ({}) => <SearchPage pageReducer={PAGE_REDUCER.SEARCH} />,
});
});
}}
/>
</Route>
</Route>
</Route>
</Route>
Действия по отправке
export const getCountries = withJWT(
createFetchAction(
GET_COUNTRIES,
`${RM_BASE_URI}/country/countries`,
getOptions
)
);
// Getting geometry from local file
export const getGeometry = () => {
return {
type: GET_GEOMETRY,
payload: GEOMETRY,
};
};
export function getNodes(param = { }, actions) {
return (dispatch, getState, parentState) => {
const { selectedNode } = getState()[parentState];
const {
JWT: { token },
routing: { locationBeforeTransitions: { pathname = '' } = {} } = {},
userPrefs: { loginName }
} = getState();
const {
FETCHING_NODES,
RESET_TREE,
HIGHLIGHT_SELECTED_CORPORATION,
SET_CORPORATION_PROGRAMMATICALLY,
SET_CORPORATION_FROM_DB,
INIT_CORPORATION_TREE,
} = actions;
let url;
url = `${config.nui.riskMessaging.uri}/corporation/default?concurLoginId=${loginName}`;
if (!isEmpty(param.corporationIdQuery)) {
url = `${url}&selectedCorporation=${param.corporationIdQuery}`;
if (pathname.includes('details')) {
url = `${url}&subLevelsOnly=true`;
}
}
const { action = '' } = param;
const onCompleteAction = action;
const loadingAction = FETCHING_NODES;
return fetch(url, {
method: 'GET',
mode: 'cors',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
'Accept': 'application/json',
'Access-Control-Allow-Origin': '*'
}
})
.then(response => {
if (response.status === 200) {
return response.json();
}
})
.then(result => {
const { corporationTree: { corporations } } = getState();
dispatch(createAction('INIT_CORPORATION_TREE')(result));
})
.catch(function (err) {
console.log("Oops... " + err);
});
};