javascript - 动态更改时如何更改MenuItem(antd)的样式?
问题描述
我有一个带有一些 Menu.Item 的菜单,每个菜单都可以访问不同的内容。我想从一个内容动态移动到另一个内容,但由于它们由一个项目表示(让用户看到他在哪里),我需要设置项目的样式,并且因为我不点击它,所以没有该项目的风格是在此之后
这是一个演示:在线演示
// antd imports
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = { currentPage: "0" };
}
handleMenuClick(e) {
this.setState({ currentPage: e.key });
}
render() {
return (
<div className="App">
<Menu onClick={e => this.handleMenuClick(e)}
selectedKeys={[this.state.currentPage]}
mode="horizontal">
<Menu.Item tab="P1" key="0"> P1 </Menu.Item>
<Menu.Item tab="P2" key="1"> P2 </Menu.Item>
</Menu>
<Row> {this.getPage()} </Row>
<Button type="primary" onClick={() => this.action()}> Primary </Button>
</div>
);
}
getPage() {
const pageKey = parseInt(this.state.currentPage, 10);
if (pageKey === 0) {
return <span>Page 1</span>;
} else if (pageKey === 1) {
return <span>Page 2</span>;
}
return <span>NOTHING TO DISPLAY</span>;
}
action() {
this.setState({ currentPage: 1 });
}
}
现在,如果我从一个项目单击到另一个项目,则菜单的样式正确,但是当我使用action()
方法时,它显示了该项目未设置样式的良好内容
解决方案
selectedKeys
接受一个字符串数组:string[]
,而action
你提供了Number
一个selectedKeys
类型number[]
。
要修复它,请在action
代码处返回一个字符串:
action = () => {
// v Needs to be a type of `String`
this.setState({ currentPage: '1' });
};
推荐阅读
- c++ - 在 C++ 中创建双关语结构
- nextcloud - 通过 docker compose 构建 nextCloud 时出现 503 错误
- python - 如何在另一个进程/线程中运行模块并使用它的功能而不阻塞主脚本
- jquery - 如果我使用 jquery-upload-file,如何增加拖放文件的 div 高度
- c++ - VertexBuffer 在尝试对其进行抽象时出错
- angular - 动态字头角度
- python - 这样做时可以复制 s3 文件并更改其 zip 格式吗?
- django - 添加handler404后找不到Django根路径
- android - ShapeableImageView 有黑色背景,不圆角
- android - 为什么 BluetoothSocket.getMaxReceivePacketSize() 和 BluetoothSocket.getMaxTransmitPacketSize() 返回 0?