我想让活动的NavLink“子菜单键”处于React状态,告诉NavLink的onClick()方法检查折叠中的任何NavLink是否处于活动状态,如果是,则不要切换isOpen进行折叠。
此代码使我在现有状态转换期间(例如在“render”内)无法更新。渲染方法应该是控制台中道具和状态
错误的纯函数。
import React from 'react';
import { connect } from 'react-redux';
import { NavLink as Link } from 'react-router-dom';
import { Nav, NavItem, NavLink, Collapse } from 'reactstrap';
import { bindActionCreators } from 'redux';
import { actions } from './../../containers/Account/store';
import classnames from 'classnames';
class NavMenuAside extends React.Component {
constructor(props) {
super(props);
this.state = { collapsed: {} };
}
toggle(itemIndex) {
const { collapsed, active } = this.state
// Don't collapse if some NavLinks inside is active
// but allow to toggle() if is collapsed (if we refresh site)
if (active === itemIndex && collapsed[itemIndex]) {
return
}
this.setState({
collapsed: {
...collapsed,
[itemIndex]: !collapsed[itemIndex]
}
});
}
isActive = (itemIndex) => (match) => {
const { active } = this.state
if (match) {
if (active !== itemIndex) {
this.setState({
active: itemIndex
})
}
}
return !!match;
}
render() {
const { t } = this.props;
return (
<Nav className="nav--aside">
<NavItem>
<NavLink tag={Link} to="/admin/qqqq/ffff">{icon('envelope-colored', 'aside-svg')} {t('navMenu.alerts')}</NavLink>
</NavItem>
<NavItem>
<NavLink onClick={() => this.toggle(1)} className={classnames({ 'open': this.state.collapsed[1] })}>{icon('analytics', 'aside-svg')} {t('navMenu.terefere')}</NavLink>
<Collapse isOpen={this.state.collapsed[1]}>
<NavLink tag={Link} isActive={this.isActive(1)} to="/admin/wfwfwfwfwwf">{t('navMenu.terefere2')}</NavLink>
<NavLink tag={Link} isActive={this.isActive(1)} to="/admin/qdqdqd">{t('navMenu.terefere2')}</NavLink>
<NavLink tag={Link} isActive={this.isActive(1)} to="/admin/qqqqq">{t('navMenu.terefere2')}</NavLink>
<NavLink tag={Link} isActive={this.isActive(1)} to="/admin/wfwwfwf">{t('navMenu.terefere2')}</NavLink>
</Collapse>
</NavItem>
</Nav>
);
}
}
我不知道您想要实现什么,但对我来说,您每次调用isActive
时都在设置相同的值,因为itemIndex
始终为1。
但是如上所述,在isActive
中删除setState
,错误就会消失
您得到这个错误是因为您的isActive
函数。
我不太了解您正在使用的组件,NavLink
,但我猜isActive
道具是一个bool
,当您获取isActive
的值时,您就得到了这段代码
if (match) {
if (active !== itemIndex) {
this.setState({
active: itemIndex
})
}
}
这会导致在渲染函数中更新状态。
您需要在渲染之前找到一种方法来计算这些值,将setState
逻辑移出该函数,并在其他地方执行它。通常,我将使用组件didUpdate
来查找状态/道具中的更改,并在那里调用setState
。
如果您对此有任何疑问或需要澄清,请告诉我。
你好,我是ReactJS的新手,我正在使用库react-bootstrap4-form-validation来验证我的表单。文档中有用于重置表单验证的函数。文档中有使用触发按钮onClick重置表单验证的示例,如下所示。对于一个条件,我需要重置验证,但不是在触发按钮onClick时,而是在父组件的道具更改时。由于这些需要,我还创建了一个函数(useCompare),用于比较从父组件接收的道具。 简
将此添加到函数组件并报告错误:警告:无法在现有状态转换期间更新(例如在内)。渲染方法应该是道具和状态的纯粹功能。
错误消息: 反应:警告setState无法在现有状态转换期间更新(例如在渲染中) 这是一个react原生应用程序,但我认为,这更多的是一个react问题。 我得到了标题中描述的错误。但我对原因感到困惑,我没有在任何父组件或子组件中设置状态。因此,我有一个孙子组件(CardLayoutResult),它呈现一个listView,每一行呈现一个新组件(Render row),该组件有一个单击事件,单击
无法在现有状态转换期间更新(例如在“呈现”中)。呈现方法应该是道具和状态的纯函数。 我如何修复这种情况,使它将加载项目,并单击链接将重新呈现表单?
我已经创建了以下代码,但是我经常得到以下错误(很多)。看起来应用程序进入了一个循环: 下面是我使用的代码:
我正在开发一个简单的待办事项列表反应应用程序(新的React.js)。我已经将项目添加到工作列表中,但删除项目会引起一个问题。在我的父反应组件中,我有以下代码: 我的组件: 运行此代码将带来: 警告:setState(...):无法在现有状态转换期间更新 问题: 为什么的渲染在添加项时立即执行回调,即: 但是,添加以删除Callback ie。