反应:在现有状态转换期间(例如在`render`中)无法更新。渲染方法应该是props和state的纯函数

时间:2019-07-17 15:48:28

标签: javascript reactjs react-redux react-router reactstrap

我希望在React状态下具有活动的NavLink“子菜单键”,以告诉NavLink的onClick()方法检查是否有折叠中的NavLinks处于活动状态,如果是这样,请不要切换isOpen来折叠。

1。如果“折叠”内部的NavLink之一处于活动状态,我想停止折叠当前的折叠

2。刷新网站后(如果其中的某些NavLink处于活动状态)打开崩溃会很高兴

此代码使我在控制台中出现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> ); } } 错误。

from io import StringIO
from pdfminer.pdfinterp import PDFResourceManager , process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layput import LAParams



def to_txt(pdf_path):
    input_ = file(pdf_path , 'rb')
    output = StringIO()

    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams = LAParams())
    process_pdf(manager, converter, input_)

    return output.getvalue()

b = to_txt(rb"C:\Users\Jasvinder Singh\Desktop\HACK-IN REPORT.docx")

ImportError: cannot import name 'process_pdf' from 'pdfminer.pdfinterp' (C:\Users\Jasvinder Singh\Anaconda3\lib\site-packages\pdfminer\pdfinterp.py)

2 个答案:

答案 0 :(得分:1)

由于您的isActive函数,您遇到了该错误。

我对您使用的组件NavLink知之甚少,但我猜想isActive道具是bool,而您正在获取{ {1}}您将进入这段代码

isActive

这将导致更新在渲染函数中的状态。

您需要找到一种方法在渲染之前弄清楚这些值,将if (match) { if (active !== itemIndex) { this.setState({ active: itemIndex }) } } 逻辑移出该函数,然后在其他地方执行。通常,我将使用setState来查找状态/道具的更改,然后在其中调用componentDidUpdate

如果您对此有任何疑问或需要澄清,请告诉我。

答案 1 :(得分:1)

我不知道您要达到什么目的,但是对我来说,由于isActive始终为1,因此每次调用itemIndex时,您都设置了相同的值来声明。

但是如上所述,请删除setState中的isActive,错误将会消失