我正在尝试折叠 onclick 方法上的导航栏,但它不起作用

Posted

技术标签:

【中文标题】我正在尝试折叠 onclick 方法上的导航栏,但它不起作用【英文标题】:i am trying to collapse the nav bar on onclick method but it is not working 【发布时间】:2016-11-07 13:51:22 【问题描述】:

这是来自控制台的错误:

在现有状态转换期间无法更新(例如在render 或其他组件的构造函数中)。渲染方法应该是 props 和 state 的纯函数;构造函数的副作用是一种反模式,但可以移动到 `componentWilmount'。

代码:

    import Component, PropTypes from 'react';

    import './Header.less';

    import  Button,Navbar, Nav, NavItem, CollapsibleNav,  NavDropdown, NavBrand, MenuItem from 'react-bootstrap';

    import SearchBar from 'components/search/SearchBar';

    import LinkContainer from 'react-router-bootstrap';

export default class Header extends Component 

    static propTypes = 

        flux: PropTypes.object.isRequired,

        searchTerm: PropTypes.string

    ;

    state = 
            navExpanded: false
    

    onNavItemClick = () => 
        this.setState( navExpanded: false );
    

    onNavbarToggle = () => 
        this.setState(navExpanded: !this.state.navExpanded);
    

    render() 
        return (
            <Navbar fixedTop inverse  toggleNavKey=0 onClick=this.onNavbarToggle()>
                <Navbar.Header>
                    <Navbar.Brand>
                        <LinkContainer to="/">
                            <a className="navbar-brand"><img  src=Logo /></a>
                        </LinkContainer>
                    </Navbar.Brand>
                    <Navbar.Toggle />
                </Navbar.Header>
                <Navbar.Collapse>
                    <Nav navbar>
                        <LinkContainer to="/#####">
                            <NavItem onClick= this.onNavItemClick  eventKey=1>xxxxxxxxxxxxxx</NavItem>
                        </LinkContainer>
                        <LinkContainer to="/#####">
                            <NavItem onClick= this.onNavItemClick  eventKey=2>xxxxxxxxxxxx</NavItem>
                        </LinkContainer>
                        <LinkContainer to="/#######">
                            <NavItem onClick= this.onNavItemClick  eventKey=3>xxxxxxxxx</NavItem>
                        </LinkContainer>
                        <LinkContainer to="/######">
                            <NavItem onClick= this.onNavItemClick  eventKey=4>xxxxxxxxx</NavItem>
                        </LinkContainer>
                        <LinkContainer to="/######">
                            <NavItem onClick= this.onNavItemClick  eventKey=5>xxxxxxxxx</NavItem>
                        </LinkContainer>
                    </Nav>
                    <Nav pullRight>
                        <SearchBar onClick= this.onNavItemClick  searchTerm=this.props.searchTerm />
                    </Nav>
                </Navbar.Collapse>
            </Navbar>
        );
    

【问题讨论】:

【参考方案1】:

在这一行:

<Navbar fixedTop inverse toggleNavKey=0 onClick=this.onNavbarToggle()>

不是传入函数体this.onNavbarToggle,而是传入运行函数的结果,这不是你想要的。每次渲染都会对函数进行评估。您需要传入对函数的引用,而不是函数的结果,如下所示:

<Navbar fixedTop inverse toggleNavKey=0 onClick=this.onNavbarToggle>

【讨论】:

我很早就发现我正在传递一个函数,但我需要传递对变量的引用我有一个已经公开的状态,我正在尝试设置状态,所以它不允许我这样做如果我使用任何其他名称并将该变量设置为它的工作,而不是状态谢谢【参考方案2】:

这里:

<Navbar fixedTop inverse  toggleNavKey=0 onClick=this.onNavbarToggle()>

您在render 内立即调用onNavbarToggle()(更新状态)。如果您以与 NavItemSearchBar onClick 道具相同的方式引用它(无调用),它应该可以工作。 React 建议您使用componentWillMount,以防您确实想立即调用该方法。

【讨论】:

以上是关于我正在尝试折叠 onclick 方法上的导航栏,但它不起作用的主要内容,如果未能解决你的问题,请参考以下文章

单击导航条折叠/关闭

按下后退按钮时,自动折叠移动设备上的下拉导航栏菜单

Bootstrap 4导航栏折叠菜单右对齐

单击时使导航栏折叠/关闭

导航栏上的 CSS 对齐问题

Bootstrap 4导航栏右对齐在移动设备上不折叠的按钮