Действие, вызываемое в ComponentDidMount, вызывается бесконечно - PullRequest
0 голосов
/ 19 октября 2018

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

Маршрутизация ->

render() {

      return (
        <div>
          <Router history={history}>
            <div>
              <Switch>
                 { this.props.isFetching && <Loading />  }
                <PrivateRoute exact path="/" component={LandingScreen} />
                <PrivateRoute exact path="/QuizSetupMain" component={QuizSetupMain} />
                <Route exact path="/login" component={LoginComponent} />
              </Switch>
            </div>
          </Router>
        </div>
      )
    }
  }
}

PrivateRoute ->

const PrivateRoute = ({ component: Component, isFetching, hasUserLogIn, path, ...rest }) => {
  hasUserLogIn =  localStorage.getItem("access_token");
  console.log("hasUserLogIn", hasUserLogIn);
  if(hasUserLogIn !== undefined && hasUserLogIn !== null) {
      hasUserLogIn = true;
  }  else {
      hasUserLogIn = false;
  }
  console.log("hasUserLogIn",hasUserLogIn);
  return hasUserLogIn ?
    (
      <Route
        {...rest}
        path={path}
        component={Component}
      />
    )
    :
    (
      <Redirect
        to={{
          pathname: "/login",
          state: { from: path }
        }}
      />
    )
};

Итак, здесь После успешного входа в систему я делаю,

history.push('/');
                    dispatch({
                        type: LOGIN_SUCCESS,
                        data: response.payload,
                    })  In the action of login.

Сейчас, на экране Приземления, что означает после маршрута /в этом компоненте я вызываю действие, которое выглядит как

componentDidMount() {
    this.props.fetchUserJd();
  }

, поэтому всякий раз, когда он переходит к этому / в то время, когда он вызывает этот метод, в действии

export function fetchUserJd() {
  return (dispatch) => {
    let url = FETCH_JD_ROOT_URL + page + "&" + size;
    dispatch({
      type:REQUEST_INITIATED
    })
    get(url)
      .then((response) => {
        if (response.status === 200) {
          dispatch({
            type: REQUEST_SUCCESSED,
          });
          dispatch({
            type: FETCHING_JOBDESCRIPTION_SUCCESS,
            data: response.payload,
          }
          )
        }

Я делаю сейчас,

static getDerivedStateFromProps(nextProps, prevState) {
    if (nextProps.hasuserLogin || localStorage.getItem("access_token")) {
      nextProps.fetchUserJd();
    }
  }

Итак, здесь я даже показываю загрузчику, что состояние меняется, но все равно он снова и снова вызывает запрос API.Я не понимаю, почему это снова вызывает тот же запрос.кто-нибудь может мне предложить?

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