最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Change NavLink text Color onClick - Stack Overflow

programmeradmin1浏览0评论

How can I change the text color of the links in the navbar in react.

navLink1{
color: black;
}

   
<div className="left-navlinks">
                    <img className="logo" src={logo}/>
                    <Link to="/"></Link>
                    <Link to="/home"> <div className="navlink1">Home</div></Link>
                    <Link to="/about"> <div className="navlink2">About</div></Link>
                    
</div>

I have tried doing it with hover property, but it is not working. I want to make the text color blue when the link is clicked and selected

How can I change the text color of the links in the navbar in react.

navLink1{
color: black;
}

   
<div className="left-navlinks">
                    <img className="logo" src={logo}/>
                    <Link to="/"></Link>
                    <Link to="/home"> <div className="navlink1">Home</div></Link>
                    <Link to="/about"> <div className="navlink2">About</div></Link>
                    
</div>

I have tried doing it with hover property, but it is not working. I want to make the text color blue when the link is clicked and selected

Share Improve this question edited Aug 25, 2020 at 10:18 hgb123 14.9k3 gold badges23 silver badges43 bronze badges asked Aug 25, 2020 at 10:12 Ayesha YounisAyesha Younis 172 silver badges5 bronze badges
Add a ment  | 

10 Answers 10

Reset to default 2

NavLink gives us good solution for this, like that:

navItem.module.css:

.left_navlinks a {
   color:black;
   text-decoration: none;
 }
 
 .left_navlinks a:hover,
 .left_navlinks a:active,
 .left_navlinks a.active {
   color: blue;
 }

App.js:

import React from "react";
import { NavLink } from "react-router-dom";
import classes from "./navItem.module.css";

class App extends React.Component {
   render() {
      return (
         <>
            <div className={classes.left_navlinks}>
               <img className="logo" src={logo} />
               <NavLink to="/"></NavLink>
               <NavLink to="/home" activeClassName={classes.active}>
                  Home
               </NavLink>
               <NavLink to="/about" activeClassName={classes.active}>
                  About
               </NavLink>
            </div>
         </>
      );
   }
}

export default App;

The Link ponent will render a <a> element. So to change its color, just add this style:

a {
  color: black;
}

You can try it here.

Instead of adding in div. You can directly pass class to link:

.navLink1{
color: black;
}

   
<div className="left-navlinks">
                    <img className="logo" src={logo}/>
                    <Link to="/"></Link>
                    <Link to="/home" className="navlink1"> Home</Link>
                    <Link to="/about" className="navlink2">About</Link>                    
</div>


Here is one poc of this:

import React from "react";
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";

import "./style.css";

function BasicExample() {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/" className="navLink1">
              Home
            </Link>
          </li>
          <li>
            <Link to="/about" className="navlink2">About</Link>
          </li>
          <li>
            <Link to="/dashboard" className="navLink1">Dashboard</Link>
          </li>
        </ul>

        <hr />

        {/*
          A <Switch> looks through all its children <Route>
          elements and renders the first one whose path
          matches the current URL. Use a <Switch> any time
          you have multiple routes, but you want only one
          of them to render at a time
        */}
        <Switch>
          <Route exact path="/">
            <Home />
          </Route>
          <Route path="/about">
            <About />
          </Route>
          <Route path="/dashboard">
            <Dashboard />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

// You can think of these ponents as "pages"
// in your app.

function Home() {
  return (
    <div>
      <h2>Home</h2>
    </div>
  );
}

function About() {
  return (
    <div>
      <h2>About</h2>
    </div>
  );
}

function Dashboard() {
  return (
    <div>
      <h2>Dashboard</h2>
    </div>
  );
}



export default function App() {
  return (
    <BasicExample/>
  );
}

Demo: https://stackblitz./edit/react-kcmdvt?file=src/App.js

i remended you to use styled-ponents for add css to the ponents.

https://styled-ponents./docs/basics#styling-any-ponent

  <Link href="#" color="primary">
                <h2>Link</h2>
             </Link>

In order to keep the link as an active link when clicked, you will need to pass some prop to this child ponent from parent ponent and have a ternary operator to apply className to the Link which matches active from prop passed.

For example:-

import React from 'react';
import { Link } from 'react-router-dom';

function navLink({activeLink}) {
    return (
        <div className="left-navlinks">
            <img className="logo" src={logo}/>
            <Link to="/"></Link>
            <Link to="/home"> <div className={activeLink === home ? `active-navlink` : `normal-navlink`}>Home</div></Link>
            <Link to="/about"> <div className={activeLink === about ? `active-navlink` : `normal-navlink`}>About</div></Link>                    
        </div>
    )
}

export default navLink

You should be able to remove the div altogether and have the className on the Link ponent, there's also no need for a different className for each one.

To change the color when the link is the currently selected option you could use the 'active' selector, or if you just want it to change if it has been clicked then you could use 'visited'.

Here's an example with the 'active' selector.

navLink: {
  color: black;
}
navLink:active {
  color: blue;
}

I also assume you're importing a css file for the style?

<div className="left-navlinks">
                    <img className="logo" src={logo}/>
                    <Link to="/"></Link>
                    <Link to="/home" className="navLink">Home</Link>
                    <Link to="/about" className="navLink">About</Link>
                    
</div>

So if you want to change the link color by clicking the text you should use an onClick method.Use state to store the new color that you want.The code is as follows.Note that i have used a functional ponent

    const [Color, setColor] = useState([""])
  const handleColor= e =>{
     setColor("blue")
      
  }
return (
    <div className="left-navlinks">

     <div className="navlink1" style={{color:Color}}  onClick={handleColor}>Home</div>
    

First of all i think its better to use NavLink from react-router-dom rather the Link. Now NavLink returns an tag. So you can target them .navlinks > a { color: black }. However if you want to change the color when active for instance you probably need the !imporant in order to overwrite it. Hope it works.

const location = useLocation();
    <div>
        <img className="logo" src={logo}/>
        <Link to="/"></Link>
        <Link to="/home" className={location.pathname === "/home" ? "navLink1": ""}> Home</Link>
        <Link to="/about" className={location.pathname === "/about" ? "navLink1":""}> About</Link>
    </div>

Please try this. This works for me.

发布评论

评论列表(0)

  1. 暂无评论