【问题标题】:Ant Design Layout is not working as expectedAnt Design Layout 未按预期工作
【发布时间】:2021-10-30 08:31:23
【问题描述】:

我有一个 React 应用程序。我决定使用Ant Design 添加布局。我跟着下面的例子。

https://2x.ant.design/components/layout/#components-layout-demo-custom-trigger

这是我的组件代码。 (Full.js)

import React, { Component, Fragment } from 'react'
import { Layout, Menu } from 'antd'
import Icon from '@ant-design/icons'
import './Full.css'
import ReactDOM from 'react-dom'
import DailyData from '../DailyData'
import Container from 'react-bootstrap/Container'
import Toggle from './Toggle'

const { Header, Footer, Sider, Content } = Layout;

class Full extends React.Component {

    state = {
        collapsed: false,
    };
    toggle = () => {
        this.setState({
            collapsed: !this.state.collapsed,
        });
    }

    render() {
        return (
            <Layout style={{ height: "100vh" }}>
                <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 }}>
                        Content
              </Content>
                </Layout>
            </Layout>
        );
    }
}

export default Full;

我在 App.js 文件中使用如下组件。

import React from 'react';
import 'bootstrap/dist/css/bootstrap.min.css';
import Header from './components/layout/Header.js'
import DailyData from './components/DailyData.js'
import Container from 'react-bootstrap/Container'
import Toggle from './components/layout/Toggle.js'
import Full from './components/layout/Full'


class App extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div className="App">
        <Full />
      </div >
    );
  }
}

export default App;

我的 Full.css 文件如下。

#components-layout-demo-custom-trigger .trigger {
    font-size: 18px;
    line-height: 64px;
    padding: 0 16px;
    cursor: pointer;
    transition: color .3s;
  }

  #components-layout-demo-custom-trigger .trigger:hover {
    color: #108ee9;
  }

  #components-layout-demo-custom-trigger .logo {
    height: 32px;
    background: #333;
    border-radius: 6px;
    margin: 16px;
  }

但是输出会这样显示。

【问题讨论】:

    标签: javascript css reactjs react-redux antd


    【解决方案1】:

    好吧,我也使用了 Ant design Sider,我使用的是 4.4.1 版本。不确定您想要实现什么,所以我将与您分享整个代码。

    import React from 'react';
    import { Route, Switch, NavLink, Redirect, withRouter } from 'react-router-dom'
    import {RouteComponentProps} from "react-router";
    import { Layout, Menu } from 'antd';
    import {
      DesktopOutlined,
      PieChartOutlined,
      UserOutlined,
      SettingOutlined
    } from '@ant-design/icons';
    
    import Shipper from '../shipper/shipper'
    
    const { Header, Content, Footer, Sider } = Layout;
    const { SubMenu } = Menu;
    
    // Type whatever you expect in 'this.props.match.params.*'
    type PathParamsType = {
      param1: string,
    }
    
    // Your component own properties
    type PropsType = RouteComponentProps<PathParamsType> & {
    
    }
    
    class Sidebar extends React.Component<PropsType> {
    
      state = {
        collapsed: false,
      };
    
      onCollapse = (collapsed: any) => {
        this.setState({ collapsed });
      };
    
    
      render() {
        let { pathname } = this.props.location;
        return (
          <Layout style={{ minHeight: '100vh' }}>
            <Header className="header">
              <div className="logo" />
              <Menu mode="horizontal" theme="dark" className="flex-setting">
                <SubMenu icon={<SettingOutlined />} title="Settings">
                  <Menu.ItemGroup title="Basic Settings">
                    <Menu.Item key="setting:2">
                      <a href={"/accounts/logout/"} target="_self">
                        Signout
                      </a>
                    </Menu.Item>
                  </Menu.ItemGroup>
                </SubMenu>
              </Menu>
            </Header>
            <Layout>
            <Sider collapsible collapsed={this.state.collapsed} onCollapse={this.onCollapse}>
              {/* <div className="logo" /> */}
              <Menu theme="dark" 
              defaultSelectedKeys={['/shipper']}
              selectedKeys={[pathname]} 
              mode="inline">
                <Menu.Item key="/shipper" icon={<PieChartOutlined />}>
                  <NavLink to="/shipper">
                    <span>Shipper</span>
                  </NavLink>
                </Menu.Item>
                </SubMenu>
              </Menu>
            </Sider>
            <Layout className="site-layout">
              {/* <Header className="site-layout-background" style={{ padding: 0 }} /> */}
              <Content style={{ margin: "16px 16px", background: "#fff" }}>
                <div style={{ padding: 24, background: "#fff", minHeight: 360 }}>
                  <Switch>
                    <Route exact path="/" render={() => (
                        <Redirect to="/shipper"/>
                    )}/>
                    <Route path="/shipper">
                      <Shipper />
                    </Route>
                  </Switch>
                </div>
              </Content>
              <Footer style={{ textAlign: 'center' }}>Copyrights &copy; 2020 All Rights Reseverd by Company.</Footer>
            </Layout>
          </Layout>
          </Layout>
        );
      }
    }
    
    export default withRouter(Sidebar);
    

    我的 CSS 如下:

    .header {
      display: inherit;
    }
    
    .logo {
      height: 32px;
      width: 35px;
      margin: 16px;
      background-image: url("main-logo.jpg");
    }
    
    .flex-setting {
      display: flex;
      flex-direction: row-reverse;
      width: 100%;
    }
    

    很多东西对你来说是不必要的,所以删除那部分。一旦你按照这个,你会实现一些链接这个:

    【讨论】:

      【解决方案2】:

      从 css 文件中删除“#components-layout-demo-custom-trigger”,它将起作用。 我正在分享我的 css 文件。 应用.css

         @import "~antd/dist/antd.css";
      .trigger {
        font-size: 18px;
        line-height: 64px;
        padding: 0 24px;
        cursor: pointer;
        transition: color 0.3s;
      }
      
      .trigger:hover {
        color: #1890ff;
      }
      .logo {
        height: 32px;
        background: rgba(255, 255, 255, 0.2);
        margin: 16px;
      }
      
      .site-layout .site-layout-background {
        background: #fff;
      }
      

      【讨论】:

        【解决方案3】:

        因为示例前面有触发器类 ID #component-layout-demo-custom-trigger 但复制的代码也删除了 #component-layout-demo-custom-trigger enter image description here

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 2021-12-04
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-04
        • 2022-01-24
        相关资源
        最近更新 更多