reactjs 使用React.js切换活动链接的图像

hiz5n14c  于 2023-03-12  发布在  React
关注(0)|答案(3)|浏览(168)

我目前正试图为一个学校项目学习ReactIdeJs,在结合活动链接切换图像时遇到了麻烦(我已经搜索了高和低的教程,但无济于事)。
我的网站将看起来类似于旧时代 Realm 之心1菜单主题;导航栏如下图所示。

如上图所示,主页被硬编码为“活动”。
我需要的帮助是使每个链接在选中/活动时都显示为“活动”状态。当用户单击其中一个导航链接时,图像应该从灰色变为黑色/橙子。当链接未选中时(或不活动),图像应该从黑色/橙子变回灰色。活动/选中的链接也应该有黑色文本,而不活动的链接有灰色。到目前为止,我所知道的只是如何切换一个类而不是多个类。总的来说,我真的不知道该怎么做。
我如何切换一个导航链接活动,并改变其图像,同时也改变所有其他导航链接到非活动,改变他们的图像以及?任何帮助将不胜感激。我有以下代码为我的导航栏到目前为止:

export class NavMenu extends Component {
  static displayName = NavMenu.name;

  constructor(props) {
super(props);
this.toggleNavbar = this.toggleNavbar.bind(this);
this.state = {
  collapsed: true
};
  }

  toggleNavbar() {
this.setState({
  collapsed: !this.state.collapsed
});
  }

  render() {
return (
  <Navbar
    fixed="bottom"
    className="navbar-expand-sm navbar-toggleable-sm ng-white border-top mb-3"
    light
  >
    <NavbarToggler onClick={this.toggleNavbar} className="mr-2" />
    <Collapse
      className="d-sm-inline-flex flex-sm-row-reverse"
      isOpen={!this.state.collapsed}
      navbar
    >
      <ul className="navbar-nav mr-auto">
        <NavItem>
          <NavLink
            tag={Link}
            id="navHome"
            className="text-dark active"
            to="/"
          >
            <img
              src="/Images/NLUnactiveImg.png"
              alt="Unactive Link Image"
              height="45"
              width="45"
              hidden
            />
            <img
              src="/Images/NLActiveImg.png"
              alt="Active Link Image"
              height="45"
              width="45"
            />
            Home
          </NavLink>
        </NavItem>
        <NavItem>
          <NavLink
            tag={Link}
            d="navResume"
            className="text-dark inactive"
            to="/resume"
          >
            <img
              src="/Images/NLUnactiveImg.png"
              alt="Unactive Link Image"
              height="45"
              width="45"
            />
            <img
              src="/Images/NLActiveImg.png"
              alt="Active Link Image"
              height="45"
              width="45"
              hidden
            />
            Resume
          </NavLink>
        </NavItem>
        <NavItem>
          <NavLink
            tag={Link}
            d="navContact"
            className="text-dark inactive"
            to="/contact"
          >
            <img
              src="/Images/NLUnactiveImg.png"
              alt="Unactive Link Image"
              height="45"
              width="45"
            />
            <img
              src="/Images/NLActiveImg.png"
              alt="Active Link Image"
              height="45"
              width="45"
              hidden
            />
            Contact
          </NavLink>
        </NavItem>
        <NavItem>
          <NavLink
            tag={Link}
            d="navFetch"
            className="text-dark inactive"
            to="/fetch-data"
          >
            <img
              src="/Images/NLUnactiveImg.png"
              alt="Unactive Link Image"
              height="45"
              width="45"
            />
            <img
              src="/Images/NLActiveImg.png"
              alt="Active Link Image"
              height="45"
              width="45"
              hidden
            />
            Fetch data
          </NavLink>
        </NavItem>
      </ul>
    </Collapse>
    <div>
      {' '}
      <PlaySound child={this.state.child} />{' '}
    </div>
  </Navbar>
);
  }
}
rryofs0p

rryofs0p1#

首先把你的css(图片)移到一个单独的css文件中。创建一个类并把你的css放进去。类似这样

<NavLink tag={Link} d="navResume" className="text-dark inactive resumeImage" to="/resume">
    Resume
</NavLink>;

在css文件中

.resumeImage {
    //declare your image styles here
}

对所有导航链接重复上述操作。
现在保持那些样式,你只想应用到一个单独的类中的活动链接,并应用于所有的导航链接类,如下所示

<NavLink
    tag={Link}
    d="navResume"
    className="text-dark inactive resumeImage"
    activeClassName="activestyleclass"
    to="/resume"
>
    Resume
</NavLink>;
1bqhqjot

1bqhqjot2#

你可以检查当前的URL并根据URL修改图片,因为活动类也应该依赖于URL。你可以使用react钩子useLocation来获取当前的URL。

import { useLocation } from 'react-router-dom';

const Component= () => {
  const [pathname, setPathname] = useState('/');
  const location = useLocation();

  useEffect(() => {
    setPathname(location.pathname);
  }, [location]);

  return (
    <nav className="navbar">
      <NavLink to="/" className="navbar-item">
        {pathname === '/' ? (
          <img src="/images/navbar/home_active.png" alt="Home" />
        ) : (
          <img src="/images/navbar/home.png" alt="Home" />
        )}
      </NavLink>
.....
ruyhziif

ruyhziif3#

<NavLink to="/dashboard">
{({ isActive}) => (
   <>
      <img src={isActive ? activeMenuIcon : menuIcon} alt="" />
      <div>Search</div>
   </>
)}

参考:https://reactrouter.com/en/main/components/nav-link

相关问题