javascript - React 路由器显示没有匹配的路由器

标签 javascript reactjs react-redux react-router react-router-dom

enter image description here应用程序.js

import Login from './Auth/components/login/Login';
import { Route, BrowserRouter, Routes, Outlet } from 'react-router-dom';
import SignIn from './Auth/components/signin/Signin';
import Home from './Home/Home';
import Dogs from './pets/Dogs';
import Cats from './pets/Cats';
import Others from './pets/Others';
import Pets from './pets/Pets';
import { Header } from './ui/Header/Header';
import { ContextClickValue } from './context/ContextClick';
import Cart from './Auth/components/cart/Cart';


function App() {
  return (
    <>
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<Home />} >
          </Route>
        </Routes>
        <Header />
        <Routes>
          <Route path="/login" element={<Login />}></Route>
          <Route path="/signin" element={<SignIn />}></Route>
          <Route path="/cart" element={<Cart />}></Route>
          <Route path="pets" element={< Outlet />}>
            <Route index element={<Pets />} />
            <Route path="dogs" element={<Dogs />} />
            <Route path="cats" element={<Cats />} />
            <Route path="others" element={<Others />} />
          </Route>
        </Routes>
      </BrowserRouter>
    </>
  );
}

export default App;

标题.js

import { menuItems } from "../../Home/MenuItems";
import MenuItemComponent from "./MenuItemComponent";
import HeaderStyles from "./Header.module.css";
import { ContextClick, ContextClickValue } from "../../context/ContextClick";
import AddShoppingCartIcon from '@mui/icons-material/AddShoppingCart';
import  {useSelector} from 'react-redux'
import { NavLink, useNavigate } from "react-router-dom";


export function Header() {
    const cart = useSelector(state => state.cart.cart)
    const  navigate = useNavigate()

    function navigateToCart(e){
         e.preventDefault()
        navigate('/cart')
    }
    let  total = 0;
    return (
        <section className={HeaderStyles.navbar}>
            <header>
                <h4 className={HeaderStyles.logo}>PETSHOP</h4>
                <nav>
                        <MenuItemComponent items={menuItems} />
                </nav>
            </header>
            <section style={{ float:'right',margin:30, color:'white'}}>
            <AddShoppingCartIcon  style={{cursor:'pointer'}} onClick={navigateToCart}/>
            {cart.forEach(item => {
                total += item.quantity
            })}
            <span>{total}</span>
            </section>
        </section>
    )
}

我也尝试过使用 Navlink

 <NavLink to="/cart">
             <AddShoppingCartIcon  style={{cursor:'pointer'}} />
            {cart.forEach(item => {
                total += item.quantity
            })}
            </NavLink>  
  1. 我正在尝试导航到购物车(我不知道为什么它不起作用)

  2. 在开发工具中,它显示匹配的路由器(我尝试清除缓存并硬重新加载并重新启动我的服务器)

  3. 我已更换购物车来登录以检查其是否导航成功

  4. 沙盒链接 https://codesandbox.io/p/github/muthyalaDivyaVenkatesh/authentication/master

任何人都可以告诉我为什么它不起作用。

最佳答案

问题

您正在渲染 2 个 Header 组件,一个位于 Routes 组件内的 Home 组件内,另一个位于其自身的路由外部。 Header 呈现链接,其中一个目标为 "/cart",但 Routes 组件不会呈现该路径的路线。 其他 Routes 组件缺少路径 "/" 上的路由渲染。

此外,Cart 组件不会返回从状态中选择的购物车数据的映射 JSX。

function Cart() {  
  const cart = useSelector((state)=> state.cart.cart)
    
  return (
    <div>
      {cart.map(cartItem => {
        <ShoppingCard                  // <-- not returned!!
          imageUrl={cartItem.imageUrl}
          price={cartItem.price}
        />
      })}
    </div>
  )
}

解决方案

创建一个呈现 Header 组件的布局组件,并从 Home 组件中删除 Header

App.js

const AppLayout = () => (
  <>
    <Header />
    <Outlet />
  </>
);

function App() {
  return (
    <>
      <BrowserRouter>
        <Routes>
          <Route element={<AppLayout />}>
            <Route path="/" element={<Home />} />
            <Route path="/login" element={<Login />} />
            <Route path="/signin" element={<SignIn />} />
            <Route path="/cart" element={<Cart />} />
            <Route path="pets">
              <Route index element={<Pets />} />
              <Route path="dogs" element={<Dogs />} />
              <Route path="cats" element={<Cats />} />
              <Route path="others" element={<Others />} />
            </Route>
          </Route>
        </Routes>
      </BrowserRouter>
    </>
  );
}

Home.js

export default function Home() {
  return (
    <>
      <ImageChanging />
      <TopDeals />
    </>
  );
}

Cart.js

function Cart() {
  const cart = useSelector((state) => state.cart.cart);

  return (
    <div>
      <h1>Cart</h1>
      {cart.map((cartItem) => {
        return (          // <-- return the ShoppingCard component
          <ShoppingCard
            width={300}
            height={300}
            {...cartItem}
          />
        );
      })}
    </div>
  );
}

关于javascript - React 路由器显示没有匹配的路由器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74272091/

相关文章:

reactjs - 带有下一个路由的响应式(Reactive)搜索的 URLParams

javascript - "Stateless function components cannot be given refs"是什么意思?

reactjs - 警告 : Invalid value for prop `dispatch` on <span> tag

javascript - 如何使用 React Redux 调用 const click 函数内的函数?

javascript - JS 传递属于全局对象实例一部分的函数完全忽略实例本身

javascript - 从 javascript 传递到 php 时变量发生变化

javascript - JavaScript套接字连接到端口43(Whois)

ecmascript-6 - 渲染组件时如何使用点表示法?

reactjs - 当我在 Ubuntu 中输入任何东西时,它会返回/usr/bin/env : ‘bash\r’ : No such file or directory

javascript - 如何使用带 anchor 的 URL 加载 jquery Tab