Reactjs 无法从呈现方法更新状态

Reactjs 无法从呈现方法更新状态,reactjs,react-router,Reactjs,React Router,我有一个NavLink组件,如下所示: <NavLink isActive={(match, location) => this.isActiveFunc(match, location)} className={classes.subLink} to={{ pathname: "/admin/users" }}> <ListItem button className={classes.nested}> <ListItemText d

我有一个NavLink组件,如下所示:

<NavLink  isActive={(match, location) => this.isActiveFunc(match, location)}  className={classes.subLink} to={{ pathname: "/admin/users" }}>
    <ListItem button className={classes.nested}>
       <ListItemText disableTypography={this.state.activePath === "/admin/users"} inset primary="Users" />
    </ListItem>
</NavLink>
但是,这给了我以下错误:

警告:无法在现有状态转换期间更新(例如 在
渲染
或其他组件的构造函数中)。渲染方法 应该是纯粹的道具和状态功能;副作用 是反模式,但可以移动到
组件willmount


有什么办法可以解决这个问题吗?

您可以在react生命周期中使用setState。在render或其他生命周期方法react中调用方法updateActivePath。这将触发组件的额外渲染

要修复此警告,请更改componentWillMount方法或函数调用中的setState位置(单击…)

如需有关信息,请转到生命周期组件文档:

如果您要查找的“状态”已在React Router中,则将其复制到您自己的状态是不必要的重复,并且是错误的原因(尝试在
渲染期间更新状态
。您最好只从React路由器获取状态。您可以使用没有路径的路由

<Route render={({ location }) => (
   // this will render whenever the location changes
   <YourNavigationBar location={location} />
  )}
/>
(
//无论位置何时更改,都将渲染此选项
)}
/>

是react router的导航链接吗?是react router DOM的导航链接。为什么要将活动路径复制到本地状态?只需从react router DOM获取该活动路径。这似乎不起作用,因为我的组件不在a中(始终显示的是导航栏)如何获取组件willmount的当前路由器路径?答案似乎是withRouter,但在V4中它似乎已被删除。您可以在构造函数中获取当前路由器,或者使用React redux创建路由器存储。在该存储中,您可以存储许多信息(currentRoute、previousRoute,…),您可以在NavLink组件中获得此信息。这似乎可以做到!非常感谢您的建议。
<Route render={({ location }) => (
   // this will render whenever the location changes
   <YourNavigationBar location={location} />
  )}
/>