Реагировать Обновление списка в состоянии - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть эта функция:

      buildRoute(listRoutes) {
    return (
      listRoutes.map((prop, key) => {
        if (prop.subMenus != null) {
          if (prop.path !== undefined) {
            if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
              return [
                this.routes(prop, key),
                this.buildRoute(prop.subMenus)
              ];
            }
          } else {
            if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
              return this.buildRoute(prop.subMenus);
            }
          }
        } else {
          if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
            return this.routes(prop, key);
          }
        }
      })
    );
  }

Перед каждым вызовом функций маршрутов и buildRoute я бы хотел изменить статус, обновив список.Является ли это возможным?Если да, то как?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Если я использую setState, у меня бесконечный цикл

  buildRoute(listRoutes) {
console.log("Je passe là")
return (
  listRoutes.map((prop, key) => {
    if (prop.subMenus != null) {
      if (prop.path !== undefined) {
        if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
          this.setState(previousState => ({
            listRoutesUser: [...previousState.listRoutesUser, prop]
          }));
          return [
            this.routes(prop, key),
            this.buildRoute(prop.subMenus)
          ];
        }
      } else {
        if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
          this.setState(previousState => ({
            listRoutesUser: [...previousState.listRoutesUser, prop]
          }));
          return this.buildRoute(prop.subMenus);
        }
      }
    } else {
      if(prop.redirect || this.state.listMenuActionsUser.includes(prop.code)){
        this.setState(previousState => ({
          listRoutesUser: [...previousState.listRoutesUser, prop]
        }));
        return this.routes(prop, key);
      }
    }
  })
);
}

Превышена максимальная глубина обновления.Это может произойти, когда компонент повторно вызывает setState внутри componentWillUpdate или componentDidUpdate.React ограничивает количество вложенных обновлений для предотвращения бесконечных циклов.

0 голосов
/ 12 декабря 2018

Я не уверен, что понимаю ваш вопрос.Можете ли вы уточнить немного, пожалуйста?(На какое изменение статуса вы ссылаетесь, и под списком вы подразумеваете listRoutes?) Если вы имели в виду изменение состояния, а не статуса, то это можно сделать с помощью this.setState ({list: values}), который, я полагаю, вы уже знали иэто не вопрос.

...