React更新状态列表

时间:2018-12-12 16:58:25

标签: reactjs routes state

我有这个功能:

      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);
          }
        }
      })
    );
  }

在每次调用函数route和buildRoute之前,我想通过更新列表来更改状态。可能吗?如果是,怎么办?

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题。您能详细说明一下吗? (您指的是哪个状态更改,按列表的意思是listRoutes吗?) 如果您要更改状态而不是状态,那么可以通过this.setState({list:values})来完成,我假设您已经知道了,这不是问题。

答案 1 :(得分:0)

如果我使用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);
      }
    }
  })
);
}

已超过最大更新深度。当组件重复调用componentWillUpdate或componentDidUpdate内部的setState时,可能会发生这种情况。 React限制了嵌套更新的数量,以防止无限循环。