Javascript React.js“;这";在渲染函数中未定义

Javascript React.js“;这";在渲染函数中未定义,javascript,reactjs,Javascript,Reactjs,我是reactjs新手,创建了用于测试的组件。 这是我的密码 class TestComponent extends React.Component { A(){ //content here } B() { //content here } render() { let ts = true; if(ts==true){ submenu_items.push(&l

我是reactjs新手,创建了用于测试的组件。 这是我的密码

class TestComponent extends React.Component {

    A(){
        //content here
    }

    B() {
        //content here
    }

    render() {
        let ts = true;
        if(ts==true){
            submenu_items.push(<NavItem glyph='icon-fontello-search' eventKey={3} onClick={::this.B} name={B}/>);
        } else {
            submenu_items.push(<NavItem glyph='icon-fontello-gauge' eventKey={4} name={application} />);
        }

        return (
            <div>
                <div className='sidebar-nav-container'>
                    <Nav style={{marginBottom: 0}} ref={(c) => this._nav = c}>
                        {submenu_items}
                        <NavItem glyph='icon-ikons-logout' href='#' onClick={::this.A} name='A' />
                    </Nav>
                </div>
           </div>
        );
    }
}
类TestComponent扩展了React.Component{
(){
//满足于此
}
B(){
//满足于此
}
render(){
设ts=true;
如果(ts==true){
子菜单_items.push();
}否则{
子菜单_items.push();
}
返回(
这个。_nav=c}>
{子菜单_项}
);
}
}
正如您在这里看到的,我在组件中创建了两个函数

我触发了两个handleClick事件

一个位于返回函数
{::this.A}
内部,另一个位于返回函数
{::this.B}

不幸的是,A函数被完美触发,但B未被触发

它显示错误
“TypeError:无法读取未定义的属性“B”


如何修复此问题?

我认为子菜单\u items.push正在重击{this}。这将成为子菜单项,而不是react组件

您可以在该语句之前将其别名为:

if(ts==true)
{ var thisB = ::this.B; 
  submenu_items.push(<NavItem glyph='icon-fontello-search' eventKey={3} onClick={thisB} name={B}/>); }
if(ts==true)
{var thisB=::this.B;
子菜单_items.push();}

你确定
name={B}
?单击时是否有类型错误?是。不在乎名字。您可以将name重置为const,即name=“B”好吧,您正在使用ES7语法进行绑定,它应该可以正常工作,但是。。。您可以通过以下方式尝试旧的ES5方法:this.A.bind(this)或ES6匿名函数:()=>this.A()来隔离问题吗?如果您执行以下操作,会怎么样:this.A而不是::
this.B
如果我尝试::this.A而不是this.B也会显示未定义的错误我认为原因是正确的,但不是解决方案,这会中断推送(因为它会尝试将其推送到组件)我相信你是对的@Icepickle。在这种情况下,别名是唯一的选择吗?我认为
子菜单_items.push();
不会创建函数上下文。它只是一个对象文本。URL:t.co/kcNg5Uypzjif(ts==true){var thisB=::this.B;子菜单_items.push()}