response-dom.production.min.js: 171 RangeError: Превышен максимальный размер стека вызовов - PullRequest
0 голосов
/ 05 октября 2018

Я искал по всей сети, чтобы решить эту рекурсивную проблему, но ничего не смог найти ... В большинстве случаев эта проблема возникает при вызове 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);
      });

  };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...