代码之家  ›  专栏  ›  技术社区  ›  Jaikrat

如何在AntD(React UI Library)中基于菜单项单击更改内容

  •  1
  • Jaikrat  · 技术社区  · 7 年前

    here 它展示了如何使用这个组件。但我不明白当我点击不同的菜单选项时如何改变我的内容。尝试了很多搜索,但没有找到任何有用的帮助。

     import { Layout, Menu, Icon } from 'antd';
    
    const { Header, Sider, Content } = Layout;
    
    class SiderDemo extends React.Component {
      state = {
        collapsed: false,
      };
    
      toggle = () => {
        this.setState({
          collapsed: !this.state.collapsed,
        });
      }
    
      render() {
        return (
          <Layout>
            <Sider
              trigger={null}
              collapsible
              collapsed={this.state.collapsed}
            >
              <div className="logo" />
              <Menu theme="dark" mode="inline" defaultSelectedKeys={['1']}>
                <Menu.Item key="1">
                  <Icon type="user" />
                  <span>nav 1</span>
                </Menu.Item>
                <Menu.Item key="2">
                  <Icon type="video-camera" />
                  <span>nav 2</span>
                </Menu.Item>
                <Menu.Item key="3">
                  <Icon type="upload" />
                  <span>nav 3</span>
                </Menu.Item>
              </Menu>
            </Sider>
            <Layout>
              <Header style={{ background: '#fff', padding: 0 }}>
                <Icon
                  className="trigger"
                  type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'}
                  onClick={this.toggle}
                />
              </Header>
              <Content style={{ margin: '24px 16px', padding: 24, background: '#fff', minHeight: 280 }}>
                Some Conent
              </Content>
            </Layout>
          </Layout>
        );
      }
    }
    
    ReactDOM.render(<SiderDemo />, mountNode);
    

    你能帮忙吗。

    2 回复  |  直到 7 年前
        1
  •  7
  •   Jaikrat    7 年前

    把你的布局标签包在路由器标签里 react-router-dom

    import React, { Component } from 'react';
    import { BrowserRouter as Router, Route, Link } from "react-router-dom";
    import { Layout, Menu, Icon } from 'antd';
    
    import Dashboard from './containers/Dashboard/Dashboard';
    import Meseros from './containers/Meseros/Meseros';
    
    const { Header, Content, Footer, Sider } = Layout;
    const SubMenu = Menu.SubMenu;
    
    class RouterApp extends Component {
    
        state = {
            collapsed: false,
        };
    
        onCollapse = (collapsed) => {
            this.setState({ collapsed });
        }
        toggle = () => {
            this.setState({
                collapsed: !this.state.collapsed,
            });
        }
    
        render() {
            return (
                <Router>
                    <Layout style={{ minHeight: '100vh' }}>
    
                        <Sider
                            collapsible
                            collapsed={this.state.collapsed}
                            onCollapse={this.onCollapse}>
                            <div className="logo" />
                            <Menu theme="dark" defaultSelectedKeys={['1']} mode="inline">
                                <Menu.Item key="1">
                                    <Icon type="pie-chart" />
                                    <span>Deshboard</span>
                                    <Link to="/" />
                                </Menu.Item>
                                <Menu.Item key="2">
                                    <Icon type="desktop" />
                                    <span>Meseros</span>
                                    <Link to="/meseros" />
                                </Menu.Item>
                            </Menu>
                        </Sider>
                        <Layout>
                            <Header style={{ background: '#fff', padding: 0, paddingLeft: 16 }}>
                                <Icon
                                    className="trigger"
                                    type={this.state.collapsed ? 'menu-unfold' : 'menu-fold'}
                                    style={{ cursor: 'pointer' }}
                                    onClick={this.toggle}
                                />
                            </Header>
                            <Content style={{ margin: '24px 16px', padding: 24, background: '#fff', minHeight: 280 }}>
                                <Route exact path="/" component={Dashboard} />
                                <Route path="/meseros" component={Meseros} />
                            </Content>
    
                        </Layout>
    
                    </Layout>
                </Router>
            );
        }
    }
    
    
    export default RouterApp;
    
        2
  •  2
  •   Sakhi Mansoor    7 年前

    你可以绑定 onClick 用你的 MenuItem 并在单击任何菜单项时重新渲染组件。你可以满足于你的生活 Constant.js

    添加onClick方法

    <Menu.Item 
     key="1"
     onClick={this.handleMenuClick}
     >
              <Icon type="user" />
              <span>nav 1</span>
    </Menu.Item>
    

    为…做把柄 菜单项

    handleMenuClick = event => {
     //you can get here event.target.value
     //filter the content 
     //setState the content your component will re render and content will be updated.
    
    }
    
        3
  •  1
  •   Wael Fadhel    6 年前

    如果您不想每次选择菜单项时都更改路线,可以使用以下方法

    function MyComponent(){
     const [selectedMenuItem, setSelectedMenuItem]= useState('item1');
    
     const componentsSwtich = (key) => {
     switch (key) {
       case 'item1':
         return (<h1>item1</h1>);
       case 'item2':
         return (<h1>item2</h1>);
       case 'item3':
         return (<h3>item3/h3>);
       default:
         break;
      }
     };
    
    return(
     <div>
      <Menu selectedKeys={selectedMenuItem} mode="horizontal" onClick={(e) => 
            setSelectedMenuItem(e.key)}>
        <Menu.Item key="item1">your first component here</Menu.Item>
        <Menu.Item key="item2">your second here</Menu.Item>
        <Menu.Item key="item3">your third here</Menu.Item>
       </Menu>
       <div>
         {componentsSwitch(selectedMenuItem)}
       </div>
     </div>)