Reactstrap 下拉菜单打开倍数菜单
Reactstrap dropdown opening multiples menu
下面是我的页面截图:
我使用 reactstrap 下拉菜单将按钮与菜单绑定。每当我单击一个按钮时,所有下拉菜单都会打开。下面的快照是下拉问题:
这是我用过的代码:
import React, { Component } from 'react';
import './Home.css';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
export class Home extends Component {
constructor(props) {
super(props);
let $this = this;
$this.toggle = $this.toggle.bind($this);
$this.state =
{
dropdownOpen: false
};
}
toggle() {
this.setState(prevState => ({
dropdownOpen: !prevState.dropdownOpen
}));
}
render() {
return (
<div className="table-div table-responsive-xl">
<table className="table table-hover">
<thead>
<tr>
<th scope="col" />
<th scope="col">Authentication</th>
</tr>
</thead>
<tbody>
{this.state.slackmembers.map((item, key) => {
return (
<tr key={key}>
<td scope="row" />
<td>{item.Authentication}</td>
<td>
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
<DropdownToggle className="menu-button">
<i className="fa fa-ellipsis-h" aria-hidden="true" type="ellipsis" />
</DropdownToggle>
<DropdownMenu>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>First</DropdownItem>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>Second</DropdownItem>
<DropdownItem divider />
<DropdownItem style={{ fontWeight: 500, color: 'red' }}>Last </DropdownItem>
</DropdownMenu>
</Dropdown>
</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
我不知道我的方法有什么问题。有人可以帮助解决这个问题吗?
他们每个人都有相同的道具:
isOpen={this.state.dropdownOpen}
因此,当该布尔值发生变化时,它会为所有这些更改 isOpen
属性。因此 opening/closing 他们全部。您需要跟踪每个下拉菜单的打开状态。
(此外,您的构造函数中不需要 let $this = this;
)
您可以为下拉菜单创建一个新组件并管理切换状态,例如:
default class TempDropdown extends React {
constructor(props){
super(props);
this.state = {
isOpen: false
}
}
toggle = () => {
this.setState({isOpen: !this.state.isOpen})
}
render(){
return(
<Dropdown isOpen={this.state.isOpen} toggle={this.toggle}>
<DropdownToggle className="menu-button">
<i className="fa fa-ellipsis-h" aria-hidden="true" type="ellipsis" />
</DropdownToggle>
<DropdownMenu>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>First</DropdownItem>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>Second</DropdownItem>
<DropdownItem divider />
<DropdownItem style={{ fontWeight: 500, color: 'red' }}>Last </DropdownItem>
</DropdownMenu>
</Dropdown>
)
}
}
然后在您的主组件中使用它并将数据作为道具(如果有)传递,例如:
render() {
return (
<div className="table-div table-responsive-xl">
<table className="table table-hover">
<thead>
<tr>
<th scope="col" />
<th scope="col">Authentication</th>
</tr>
</thead>
<tbody>
{this.state.slackmembers.map((item, key) => {
return (
<tr key={key}>
<td scope="row" />
<td>{item.Authentication}</td>
<td>
<TempDropDown />
</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
希望这能解决您的问题:)
您可以只使用 UncontrolledDropdown 而不是 Dropdown 组件
https://reactstrap.github.io/components/dropdowns/
下面是我的页面截图:
我使用 reactstrap 下拉菜单将按钮与菜单绑定。每当我单击一个按钮时,所有下拉菜单都会打开。下面的快照是下拉问题:
这是我用过的代码:
import React, { Component } from 'react';
import './Home.css';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
export class Home extends Component {
constructor(props) {
super(props);
let $this = this;
$this.toggle = $this.toggle.bind($this);
$this.state =
{
dropdownOpen: false
};
}
toggle() {
this.setState(prevState => ({
dropdownOpen: !prevState.dropdownOpen
}));
}
render() {
return (
<div className="table-div table-responsive-xl">
<table className="table table-hover">
<thead>
<tr>
<th scope="col" />
<th scope="col">Authentication</th>
</tr>
</thead>
<tbody>
{this.state.slackmembers.map((item, key) => {
return (
<tr key={key}>
<td scope="row" />
<td>{item.Authentication}</td>
<td>
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
<DropdownToggle className="menu-button">
<i className="fa fa-ellipsis-h" aria-hidden="true" type="ellipsis" />
</DropdownToggle>
<DropdownMenu>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>First</DropdownItem>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>Second</DropdownItem>
<DropdownItem divider />
<DropdownItem style={{ fontWeight: 500, color: 'red' }}>Last </DropdownItem>
</DropdownMenu>
</Dropdown>
</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
我不知道我的方法有什么问题。有人可以帮助解决这个问题吗?
他们每个人都有相同的道具:
isOpen={this.state.dropdownOpen}
因此,当该布尔值发生变化时,它会为所有这些更改 isOpen
属性。因此 opening/closing 他们全部。您需要跟踪每个下拉菜单的打开状态。
(此外,您的构造函数中不需要 let $this = this;
)
您可以为下拉菜单创建一个新组件并管理切换状态,例如:
default class TempDropdown extends React {
constructor(props){
super(props);
this.state = {
isOpen: false
}
}
toggle = () => {
this.setState({isOpen: !this.state.isOpen})
}
render(){
return(
<Dropdown isOpen={this.state.isOpen} toggle={this.toggle}>
<DropdownToggle className="menu-button">
<i className="fa fa-ellipsis-h" aria-hidden="true" type="ellipsis" />
</DropdownToggle>
<DropdownMenu>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>First</DropdownItem>
<DropdownItem style={{ fontWeight: 500, color: 'black' }}>Second</DropdownItem>
<DropdownItem divider />
<DropdownItem style={{ fontWeight: 500, color: 'red' }}>Last </DropdownItem>
</DropdownMenu>
</Dropdown>
)
}
}
然后在您的主组件中使用它并将数据作为道具(如果有)传递,例如:
render() {
return (
<div className="table-div table-responsive-xl">
<table className="table table-hover">
<thead>
<tr>
<th scope="col" />
<th scope="col">Authentication</th>
</tr>
</thead>
<tbody>
{this.state.slackmembers.map((item, key) => {
return (
<tr key={key}>
<td scope="row" />
<td>{item.Authentication}</td>
<td>
<TempDropDown />
</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
希望这能解决您的问题:)
您可以只使用 UncontrolledDropdown 而不是 Dropdown 组件 https://reactstrap.github.io/components/dropdowns/