Reactjs 无法从呈现方法更新状态
我有一个NavLink组件,如下所示: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 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} />
)}
/>