コンポーネントに小道具として2つのドロップダウンが渡されています。私は別の状態で両方を制御することができますが、これはすべて1つの状態で行うことができると思いますか?ReactJSの複数のドロップダウン、一度に1つしか開いていない
ヘッダ
import React from 'react';
import DarkLabel from './DarkLabel';
import HeaderDropdown from './HeaderDropdown';
export default class Header extends React.Component {
componentWillMount() {
this.setState({
listOpen: false
})
}
render() {
...
return (
<div className="row header">
<div className="col-xs-10">
<DarkLabel classExtra="dark-label-lg" icon="/images/system-icons/document_empty.png"
content={taskCode}/>
<DarkLabel classExtra="dark-label-2x dark-label-lg" icon="/images/system-icons/building.png"
dropdown=<HeaderDropdown data={this.props.enquiry.entity ? this.props.enquiry.entity : null}/>
content={this.props.enquiry.entity ? this.props.enquiry.entity.name : 'ERROR'}
right_icon="/images/system-icons/bullet_arrow_down.png"/>
<DarkLabel classExtra="dark-label-md" icon="/images/system-icons/ceo.png"
dropdown=<HeaderDropdown data={this.props.enquiry.contact ? this.props.enquiry.contact : null}/>
content={this.props.enquiry.contact ? this.props.enquiry.contact.firstName + ' ' + this.props.enquiry.contact.lastName : '-'}
right_icon="/images/system-icons/bullet_arrow_down.png"/>
<DarkLabel classExtra="flag"
content={'/images/flags/large/'+this.props.enquiry.entity.country.countryCode+'.png'}
right_icon="/images/system-icons/cog.png" right_icon_callback={this.handleAddressModal.bind(this)}/>
</div>
</div>
)
}
}
HeaderDropdown
インポート 'が反応する' と反応させ;
export default class HeaderDropdown extends React.Component {
componentWillMount() {
}
render() {
return (
<div>
<div className="dark-label-dropdown">
Test
</div>
</div>
);
}
}
別のものをクリックすると、一度に1つだけ開くことができ、他のものを閉じることができますか? ClickイベントをHeaderDropdownにバインドするときに「this」から何かを保存する必要がありますか?
私は質問から何かを逃しました。これは、ユーザーがDarkLabelのright_iconをクリックしたときに発生する必要があります。
DarkLabel
import React from 'react';
export default class DarkLabel extends React.Component {
componentWillMount() {
}
truncate(limit) {
...
}
render() {
var icon = '', content = '';
var rightIcon = '';
...
return (
<div className={'pull-left dark-label-wrapper '+this.props.classExtra}>
{icon}
<div>{content}</div>
{rightIcon}
{this.props.dropdown}
</div>
);
}
}
を確認することができます。このようにコンストラクタであなたの状態を初期化する必要があります 'this.state = {listOpen:偽}' –
componentWillMountとの違いは何ですか? – imperium2335
は実際に、機能的にそれほど違いが知る限り存在しませんが、コンストラクタは、クラスのプロパティを初期化する方法はるかに慣用的です。 –