Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 蚂蚁设计响应导航栏_Reactjs_Antd - Fatal编程技术网

Reactjs 蚂蚁设计响应导航栏

Reactjs 蚂蚁设计响应导航栏,reactjs,antd,Reactjs,Antd,我使用的是AntD,本以为这将是一个简单而快速的通用和标准响应导航栏设置,但结果证明它在默认情况下没有响应: 正如你所看到的,它被压扁了 代码如下: <Menu theme="dark" mode="horizontal" defaultSelectedKeys={["1"]} style={{ l

我使用的是AntD,本以为这将是一个简单而快速的通用和标准响应导航栏设置,但结果证明它在默认情况下没有响应:

正如你所看到的,它被压扁了

代码如下:

<Menu
                        theme="dark"
                        mode="horizontal"
                        defaultSelectedKeys={["1"]}
                        style={{ lineHeight: '64px' }}
                        breakpoint="lg"
                        collapsedWidth="0"
                    >
                                <Menu.Item key="1">nav 1</Menu.Item>
                                <Menu.Item key="2">nav 2</Menu.Item>
                                <Menu.Item key="3">nav 3</Menu.Item>
                                <Menu.Item key="4"><Icon spin={true} type="plus-circle" className="publish-btn" /></Menu.Item>
                                <Menu.Item key="5"><Icon spin={true} type="login" className="loggin-btn" /></Menu.Item>
                    </Menu>
<Menu
                        theme="dark"
                        mode="horizontal"
                        defaultSelectedKeys={["1"]}
                        style={{ lineHeight: '64px' }}
                        breakpoint="lg"
                        collapsedWidth="0"
                    >

                        <Row key="1" gutter={16}>
                            <Col span={3} key="1">
                                <Menu.Item key="1">nav 1</Menu.Item>
                            </Col>
                            <Col span={3} key="2">
                                <Menu.Item key="2">nav 2</Menu.Item>
                            </Col>
                            <Col span={3} key="3">
                                <Menu.Item key="3">nav 3</Menu.Item>
                            </Col>
                            <Col span={3} offset={9} key="4">
                                <Menu.Item key="4"><Icon spin={true} type="plus-circle" className="publish-btn" /></Menu.Item>
                            </Col>
                            <Col span={3} key="5">
                                <Menu.Item key="5"><Icon type="login" className="loggin-btn" /></Menu.Item>
                            </Col>
                        </Row>
                    </Menu>

导航1
导航2
导航3
因此,我再次阅读了文档,并认为我必须使用菜单中的网格使其响应。但是,它给我带来了一些错误:

代码如下:

<Menu
                        theme="dark"
                        mode="horizontal"
                        defaultSelectedKeys={["1"]}
                        style={{ lineHeight: '64px' }}
                        breakpoint="lg"
                        collapsedWidth="0"
                    >
                                <Menu.Item key="1">nav 1</Menu.Item>
                                <Menu.Item key="2">nav 2</Menu.Item>
                                <Menu.Item key="3">nav 3</Menu.Item>
                                <Menu.Item key="4"><Icon spin={true} type="plus-circle" className="publish-btn" /></Menu.Item>
                                <Menu.Item key="5"><Icon spin={true} type="login" className="loggin-btn" /></Menu.Item>
                    </Menu>
<Menu
                        theme="dark"
                        mode="horizontal"
                        defaultSelectedKeys={["1"]}
                        style={{ lineHeight: '64px' }}
                        breakpoint="lg"
                        collapsedWidth="0"
                    >

                        <Row key="1" gutter={16}>
                            <Col span={3} key="1">
                                <Menu.Item key="1">nav 1</Menu.Item>
                            </Col>
                            <Col span={3} key="2">
                                <Menu.Item key="2">nav 2</Menu.Item>
                            </Col>
                            <Col span={3} key="3">
                                <Menu.Item key="3">nav 3</Menu.Item>
                            </Col>
                            <Col span={3} offset={9} key="4">
                                <Menu.Item key="4"><Icon spin={true} type="plus-circle" className="publish-btn" /></Menu.Item>
                            </Col>
                            <Col span={3} key="5">
                                <Menu.Item key="5"><Icon type="login" className="loggin-btn" /></Menu.Item>
                            </Col>
                        </Row>
                    </Menu>

导航1
导航2
导航3
更新
让我澄清一下。我不想要一个侧边栏(在我的例子中,它是一个小网站,没有很多页面)。我只想在重新调整菜单大小时有一个顶部导航栏。项目可以折叠并变成一个汉堡包图标。另外,我需要2个菜单项在右边

首先需要澄清的是:antd文档所说的“响应性”(在文档中)不是指导航栏项目回流,而是指侧栏折叠成一个较小的菜单,或者随着汉堡触发按钮的出现而消失

第二:混合菜单和行/列是个坏主意。发生错误的原因是,Menu.Item希望是Menu的直接子元素,而您通过Row/Col将其设置为孙子元素,这些子元素没有传递相同的道具


如您在澄清中所解释的,AntD中不支持您的要求。我的一个基于AntD的网站的工作方式与您正在寻找的类似。我在该网站上所做的是呈现两组菜单,一组用于桌面导航栏,另一组用于带汉堡包的小屏幕侧边栏,然后使用CSS媒体查询在
@screen sm
断点的两侧隐藏一个或另一个菜单。

不久前我也在寻找此类功能,并且 为了使Ant菜单具有响应性,我编写了一个简单的React组件

此组件接受Ant菜单标记作为道具,并根据视口宽度有条件地呈现菜单,可以是原样(对于桌面),也可以是将包装传递的菜单标记(对于移动设备)的Popover组件

我在这里提供了一个屏幕截图,说明当视口足够窄,可以只渲染汉堡包图标时,它会是什么样子

您可以通过工作示例找到Github回购协议


希望有帮助。

我在决定为项目选择Ant设计时考虑了这个问题。响应导航栏是常见的场景,但我想知道为什么在Ant设计中没有这样的东西? 然后,我在回购协议中搜索问题,并将其作为对问题的评论

他们有一个单独的移动设备包。内部蚂蚁设计移动有单独的部分。在该部分中,您可以找到一个适用于移动设备的组件汉堡包图标


希望这对未来的读者有所帮助。

对于响应行为,请使用antd菜单组件中的“OverflowdIndicator”属性。您可以选择在菜单折叠时显示的任何antd图标。 使用antd的网格功能(Col-xl、lg、md、sm、xs)属性控制菜单何时崩溃

请查看下面的示例,了解简单的响应导航栏:

import React from 'react';
import { Row, Col, Typography, Layout, Menu } from 'antd';
import { MenuOutlined } from '@ant-design/icons';

const { Header, Content } = Layout;
const { Title } = Typography;

export interface NavBarProps {
    selectedPage: string;
    children: React.ReactNode;
}

export const NavBar: React.FC<NavBarProps> = (props: NavBarProps) => {

const gotoPage = (page: string) => {
  //GO TO MENU ITEM PAGE
};

return (
<Row justify='center'>
  <Col xl={24} lg={24} md={24} sm={24} xs={24}>
    <Header className='header-fixed'>
      <Row>
        <Col xl={12} lg={12} md={12} sm={20} xs={20}>
          <Title id='title-button' level={4}>
            <a onClick={() => gotoPage('')}>My App</a>
          </Title>
        </Col>
        <Col xl={12} lg={12} md={12} sm={4} xs={4}>
          <Menu
            theme='dark'
            mode='horizontal'
            defaultSelectedKeys={["item1"]}
            overflowedIndicator={<MenuOutlined />}
          >
            <Menu.Item
              key="item1"
              onClick={() => gotoPage("item1")}
            >
              item1
            </Menu.Item>
            <Menu.Item
              key={"item2"}
              onClick={() => gotoPage("item2")}
            >
              item2
            </Menu.Item>
            <Menu.Item
              key={"item3"}
              onClick={() => gotoPage("item3")}
            >
              item3
            </Menu.Item>
          </Menu>
        </Col>
      </Row>
    </Header>
    <Content>{props.children}</Content>
  </Col>
</Row>
);
};
然后按如下方式使用组件:

<NavBar selectedPage=''>
  <YourPageComponent />
</NavBar>


你好,贾斯珀,谢谢你的回复。让我澄清一下。我不想要一个侧边栏(在我的例子中,它是一个小网站,没有很多页面)。我只想在重新调整菜单大小时有一个顶部导航栏。项目可以折叠并变成一个汉堡包图标。另外,我需要2个菜单项,在右边。我们有没有道具来制作菜单。菜单项会折叠并变成汉堡包图标?@JesperWe感谢您的回复。你用React吗?您能分享一下您在回答中描述的实现吗?谢谢Tomas,谢谢您在这里所做的出色工作。只有一个问题,如果我们必须为这么简单的目的编写自己的代码,而等效的UI框架(例如Bootstrap)已经实现了它,那么我们为什么还要使用Ant设计呢?当我发现AntDesign中的导航栏不响应事件时,我就有了这种感觉。你是对的,Franva,虽然Ant Design中仍然缺少这一特定功能,但其他UI框架中仍然缺少太多的优秀功能。我想说的是,它总是关于妥协,对你的项目有效的东西不一定对其他项目有效。举个例子,让我们比较一下Ant Design和React Bootstrap中的表组件-Ant Design中的表组件与Bootstrap中的表组件相比有更多的功能和选项。我确信,我提出的解决方案只是暂时的,迟早会有反应灵敏的Meni成为Ant设计的一部分:)同意:)希望不会花太长时间。看起来很有希望。这是一个非常好的解决方法