0

例如,在下图中,选择的菜单是 about,地址字符串显示它,但菜单选项卡仍显示 home

在此处输入图像描述

我是 Bootstrap 的新手

代码是这样的:

import React, { useState } from 'react';

import { Nav, NavDropdown } from 'react-bootstrap';

import 'bootstrap/dist/css/bootstrap.min.css';

export default function NavSample() {
    const [key, setKey] = useState('home');

    const handleSelect = (key) => {
        setKey(key);
    };

    return (
        <Nav variant="pills" activeKey="home" onSelect={handleSelect} defaultActiveKey="home">
            <Nav.Item>
                <Nav.Link eventKey="home" href="/home">
                    Home
                </Nav.Link>
            </Nav.Item>
            <Nav.Item>
                <Nav.Link eventKey="about" href="/about" title="about">
                    About
                </Nav.Link>
            </Nav.Item>
            <Nav.Item>
                <Nav.Link eventKey="contact" href="/contact">Contact</Nav.Link>
            </Nav.Item>
            <NavDropdown title="Pricing" id="nav-dropdown">
                <NavDropdown.Item eventKey="Basic pricing" href="/pricing/basic pricing">Basic</NavDropdown.Item>
                <NavDropdown.Item eventKey="Corporate Pricing" href="/pricing/corporate pricing">Corporates</NavDropdown.Item>
                <NavDropdown.Divider />
                <NavDropdown.Item eventKey="Enterprise Pricing" href="/pricing/enterprise pricing">Enterprise</NavDropdown.Item>
            </NavDropdown>
        </Nav>
    );
}

我错过了什么?

拉斐尔

4

1 回答 1

1

因此,要处理状态重置,您需要为您的路由使用 React 路由器,而不仅仅是hrefs

您还需要安装react-router-domreact-router-bootstrap包。

这是一个工作示例:

import 'bootstrap/dist/css/bootstrap.min.css';

import React, { useState } from 'react';
import { Nav, NavDropdown } from 'react-bootstrap';
import { BrowserRouter as Router } from 'react-router-dom';
import { LinkContainer } from 'react-router-bootstrap';

export default function NavTabs({ active_key }) {
  const [key, setKey] = useState(active_key);

  const handleSelect = (key) => {
    console.log(`selected ${key}`);
    setKey(key);
  };

  console.log(`Rendering with ${key}`);
  return (
    <Router>
      <Nav variant="pills" activeKey={key} onSelect={handleSelect}>
        <LinkContainer to="/home">
          <Nav.Link eventKey="home">Home</Nav.Link>
        </LinkContainer>
        <LinkContainer to="/about">
          <Nav.Link eventKey="about" title="about">
            About
          </Nav.Link>
        </LinkContainer>
        <LinkContainer to="/contacts">
          <Nav.Link eventKey="contact">Contact</Nav.Link>
        </LinkContainer>
        <NavDropdown title="Pricing" id="nav-dropdown">
          <NavDropdown.Item eventKey="Basic pricing" href="/pricing/basic pricing">
            Basic
          </NavDropdown.Item>
          <NavDropdown.Item eventKey="Corporate Pricing" href="/pricing/corporate pricing">
            Corporates
          </NavDropdown.Item>
          <NavDropdown.Divider />
          <NavDropdown.Item eventKey="Enterprise Pricing" href="/pricing/enterprise pricing">
            Enterprise
          </NavDropdown.Item>
        </NavDropdown>
      </Nav>
    </Router>
  );
}

并且当您使用此组件(例如 from <App>)时,请提供起始选项卡:

function App() {
  return (<NavTabs active_key="home"/>)
}
于 2021-09-03T21:32:06.807 回答