我在应用程序中使用了“ react-bootstrap”。我使用了Tab Component。我想要选项卡组件的onSelect功能。
下面是我的组件代码
export default class Users extends Component {
handleSelect() {
console.log("Tab selected")
}
render() {
return(
<div className="welcome-wrap">
<br />
<div className="row">
<h3>Users</h3>
<Tabs defaultActiveKey={1} animation={false} id="user-role-tab">
<Tab eventKey={1} title="Root Users" className="
" onSelect={this.handleSelect()}>
<RootUser/>
</Tab>
<Tab eventKey={2} title="Organization Users" onSelect={this.handleSelect()}>
<OrganizationUser/>
</Tab>
<Tab eventKey={3} title="Business Users" onSelect={this.handleSelect()}>
<BusinessUser/>
</Tab>
</Tabs>
</div>
</div>
)
}
}
在加载组件时有效,但是当我单击任何选项卡时未调用该函数。我检查了How to call an event on tabs changed in react-bootstrap的解决方案,但它也不起作用。
答案 0 :(得分:1)
看起来您没有在构造函数中绑定函数,并且可以在不使用()的情况下调用该函数。如果要传递一些参数,则需要这些(),否则就不需要
检查下面的代码以更好地理解。
ES5:
export default class Users extends Component {
constructor(props){
super(props);
this.handleSelect = this.handleSelect.bind(this);
}
handleSelect() {
console.log("Tab selected")
}
render() {
return(
<div className="welcome-wrap">
<br />
<div className="row">
<h3>Users</h3>
<Tabs defaultActiveKey={1} animation={false} id="user-role-tab">
<Tab eventKey={1} title="Root Users" className="
" onSelect={this.handleSelect}>
<RootUser/>
</Tab>
<Tab eventKey={2} title="Organization Users" onSelect={this.handleSelect}>
<OrganizationUser/>
</Tab>
<Tab eventKey={3} title="Business Users" onSelect={this.handleSelect}>
<BusinessUser/>
</Tab>
</Tabs>
</div>
</div>
)
}
}
ES6:如果使用箭头功能,则不需要绑定
export default class Users extends Component {
constructor(props){
super(props);
}
handleSelect = () => {
console.log("Tab selected")
}
render() {
return(
<div className="welcome-wrap">
<br />
<div className="row">
<h3>Users</h3>
<Tabs defaultActiveKey={1} animation={false} id="user-role-tab">
<Tab eventKey={1} title="Root Users" className="
" onSelect={this.handleSelect}>
<RootUser/>
</Tab>
<Tab eventKey={2} title="Organization Users" onSelect={this.handleSelect}>
<OrganizationUser/>
</Tab>
<Tab eventKey={3} title="Business Users" onSelect={this.handleSelect}>
<BusinessUser/>
</Tab>
</Tabs>
</div>
</div>
)
}
}
答案 1 :(得分:1)
在函数名称后有大括号的地方,是在将其分配给onSelect
属性时调用该函数。
您可以在构造函数中绑定函数,然后直接使用this.handleSelect
:
constructor() {
super();
this.handleSelect = this.handleSelect.bind(this);
}
render() {
return (
...
<Tab onSelect={this.handleSelect}>
)
}
或将其包装在匿名函数中
<Tab onSelect={(event) => this.handleSelect(event)}>
但是,基于react-bootstrap documentation,onSelect
不是<Tab/>
组件接受的属性,而是应将其放在包装的<Tabs/>
组件上。
答案 2 :(得分:1)
根据react-bootstrap
文档。 onSelect
是Tabs
而非Tab
的属性。像这样:
<Tabs
activeKey={this.state.key}
onSelect={this.handleSelect} //For Tabs
id="controlled-tab-example"
>
<Tab eventKey={1} title="Tab 1">
Tab 1 content
</Tab>
<Tab eventKey={2} title="Tab 2">
Tab 2 content
</Tab>
<Tab eventKey={3} title="Tab 3" disabled>
Tab 3 content
</Tab>
</Tabs>