简体   繁体   English

由于 react-router,NavLinks 无法工作

[英]NavLinks wont work because of react-router

Long story short, I just want the links to work but this error Uncaught TypeError: Cannot read properties of undefined (reading 'pathname') keeps popping up.长话短说,我只想让链接正常工作,但是这个错误Uncaught TypeError: Cannot read properties of undefined (reading 'pathname')不断弹出。 I did reinstall the packages, restructured the code multiple times, reopened react, deleted and added / since it did no change.我确实重新安装了软件包,多次重组代码,重新打开反应,删除和添加/因为它没有改变。 ITs such a simple project yet it comes with such a frustrating error.它是一个如此简单的项目,但它却带来了如此令人沮丧的错误。 Here's the code, hopefully your eyes see what mine don't.这是代码,希望你的眼睛能看到我没有看到的。 This is App.js这是App.js

import Category from "./components/Category";
import Pages from "./pages/Pages";
import { BrowserRouter as Router } from "react-router-dom";

function App() {
  
  return (
    <div className="App">
      <Router>
        <Category></Category>
        <Pages></Pages>
      </Router>
    </div>
  );
}

export default App;

This is Category.jsx :这是Category.jsx

import { FaPizzaSlice, FaHamburger } from "react-icons/fa";
import { GiNoodles, GiChopsticks } from "react-icons/gi";
import styled from "styled-components";
import { NavLink } from "react-router-dom";

function Category() {
  return (
    <List>
      <NavLink to={'/cuisine/Italian'}>
        <FaPizzaSlice />
        <h4>Italian</h4>
      </NavLink>
      <NavLink to={'/cuisine/American'}>
        <FaHamburger />
        <h4>American</h4>
      </NavLink>
      <NavLink to={'/cuisine/Thai'}>
        <GiNoodles />
        <h4>Thai</h4>
      </NavLink>
      <NavLink to={'/cuisine/Japanese'}>
        <GiChopsticks />
        <h4>Japanese</h4>
      </NavLink>
    </List>
  );
}

const List = styled(NavLink)`
  display: flex;
  justify-content: center;
  margin: 2rem 0rem;
`;

export default Category;

And this is Pages.jsx :这是Pages.jsx

import Home from "./Home";
import React from "react";
import { Route, Routes} from "react-router-dom";
//import { filterProps } from "framer-motion";
import Cuisine from "./Cuisine";

function Pages() {
  return (
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="cuisine/*" element={<Cuisine />} />
      </Routes>
  );
}

export default Pages;

I have no idea what else to try.我不知道还能尝试什么。 Thank you:)

There are two things to do here.这里有两件事要做。

  1. Fix typo修正错字

Pages.jsx:

Put / in front of the path as:/放在路径前面,如下所示:

<Route path="/cuisine/*" element={<Cuisine />} />
  1. change <List> into some other element ie <div> .<List>更改为其他元素,即<div> List does not work with NavLink as it is. List 不能按原样与 NavLink 一起使用。

Category.jsx:

function Category() {
    return (
        <div>
            <NavLink to={"/cuisine/Italian"}>
                <FaPizzaSlice />
                <h4>Italian</h4>
            </NavLink>
            <NavLink to={"/cuisine/American"}>
                <FaHamburger />
                <h4>American</h4>
            </NavLink>
            <NavLink to={"/cuisine/Thai"}>
                <GiNoodles />
                <h4>Thai</h4>
            </NavLink>
            <NavLink to={"/cuisine/Japanese"}>
                <GiChopsticks />
                <h4>Japanese</h4>
            </NavLink>
        </div>
    );
}

You are wrapping the links in Category in an NavLink and haven't passed a required to prop.您正在将Category中的链接包装在NavLink中,并且没有传递 required to prop。

const List = styled(NavLink)`
  display: flex;
  justify-content: center;
  margin: 2rem 0rem;
`;

... ...

function Category() {
  return (
    <List> // <-- NavLink, missing to prop
      <NavLink to={'/cuisine/Italian'}>
        <FaPizzaSlice />
        <h4>Italian</h4>
      </NavLink>
      <NavLink to={'/cuisine/American'}>
        <FaHamburger />
        <h4>American</h4>
      </NavLink>
      <NavLink to={'/cuisine/Thai'}>
        <GiNoodles />
        <h4>Thai</h4>
      </NavLink>
      <NavLink to={'/cuisine/Japanese'}>
        <GiChopsticks />
        <h4>Japanese</h4>
      </NavLink>
    </List>
  );
}

NavLink导航链接

interface LinkProps extends Omit< React.AnchorHTMLAttributes<HTMLAnchorElement>, "href" > { replace?: boolean; state?: any; to: To; // <-- to prop is required reloadDocument?: boolean; }

You probably want List to be some other styled element, like a div .您可能希望List成为其他样式元素,例如div

const List = styled.div`
  display: flex;
  justify-content: center;
  margin: 2rem 0rem;
`;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM