これはおそらく何か本当に簡単なことになるでしょう。しかし、私は、自分の反応成分がどのように書かれているか、何が間違っているかを理解するのに苦労しています。ここにコンポーネントコードがあります。Reactjsのクリックイベントの問題
import React, { Component, PropTypes } from 'react';
import styles from './Menu.css';
import SubMenu from './SubMenu';
import classNames from 'classnames/bind';
let cx = classNames.bind(styles);
export default class Menu extends Component{
static propTypes ={
menuData:PropTypes.array.isRequired
};
constructor(props){
super(props);
this.state = {menuOpenedLabel:""};
};
menuClick(label){
this.state.menuOpenedLabel = label;
};
render(){
let menus = this.props.menuData.map(function(menuItem){
let handleClick = this.menuClick.bind(this,menuItem.label);
return (<li key={menuItem.label}>
<a onClick={handleClick}>{menuItem.label}</a>
<SubMenu subMenu={menuItem.submenu} isVisible={this.state.menuOpenedLabel === menuItem.label}/>
</li>);
});
return (<nav>
<ul className={styles.menu}>{(menus)}</ul>
</nav>);
}
}
これは私がchromeで取得するエラーです。まず
Uncaught TypeError: Cannot read property 'menuClick' of undefined
私はこのコードが正しいことを明らかにそれが原因で、マップ機能のthis
内部を使用するのではと思ったが、。このリンクに基づいています。
https://facebook.github.io/react/tips/expose-component-functions.html
任意の考え?
コンストラクタでmenuClickをバインドしようとしましたか? – QoP
this.state = somethingを実行している唯一の時間は、es6のコンストラクタにあります。代わりにthis.state =ラベルをthis.setState({menuOpenedLabel:label})に変更すると、menuClick関数でthis.setState({menuOpenedLabel:label}) –
を実行します。私はこれを今すぐ得る警告:setState(...):マウントされているコンポーネントまたはマウントされているコンポーネントのみを更新できます。これは、通常、アンマウントされたコンポーネントに対してsetState()を呼び出したことを意味します。これはノーオペレーションです。 Menuコンポーネントのコードを確認してください。 –