我在SPA中创建了react-three-fiber个项目组合,但在将其部署到互联网上之前,我必须创建一个隐私策略页面.为此,我添加了一个页脚,其中有一个应该显示此页面的链接. 当我点击这个链接时,url地址变成"localhost:5173/pages/Privacy",但我没有任何页面出现. 我想我什么都试过了,Navigate,Link,CreateBrowser...有人能帮我解决这个问题吗?

我使用的技术是:

"dependencies": {
    "@emailjs/browser": " 3.11.0",
    "@react-three/drei": "9.66.0",
    "@react-three/fiber": "8.12.2",
    "framer-motion": "10.12.7",
    "maath": " 0.5.3",
    "react": " 18.2.0",
    "react-dom": " 18.2.0",
    "react-router-dom": " 6.10.0",
    "react-tilt": " 1.0.2",
    "react-vertical-timeline-component": " 3.6.0",
    "three": " 0.152.2"
  },

Main.jsx:

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import './index.css'
import { BrowserRouter } from 'react-router-dom'

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <BrowserRouter>
    <App />
    </BrowserRouter>
  </React.StrictMode>,
)

App.jsx:

import { Routes, Route } from "react-router-dom";
import {
  About,
  Contact,
  Experience,
  Tech,
  Feedbacks,
  Hero,
  Navbar,
  Works,
  StarsCanvas,
  Footer,
} from "./components";
import Privacy from "../src/components/pages/Privacy";

// Structure de notre site
const App = () => {
  return (
    <div className="relative z-0 bg-primary">
      <div className="bg-hero-pattern bg-cover bg-no-repeat bg-center">
        <Navbar />
        <Hero />
      </div>

      <About />
      <Experience />
      <Tech />
      <Works />
      <Feedbacks />

      <div className="relative z-0">
        <Contact />
        <StarsCanvas />
      </div>

      <Footer />
      <Routes>
        <Route path="../src/components/pages/Privacy" element={<Privacy />} />
      </Routes>
    </div>
  );
};

export default App;

Index.js:

import { EarthCanvas, BallCanvas, ComputersCanvas, StarsCanvas } from './canvas';
import Hero from './Hero';
import Navbar from './Navbar';
import About from './About';
import Tech from './Tech';
import Experience from './Experience';
import Works from './Works';
import Feedbacks from './Feedbacks';
import Contact from './Contact';
import Footer from './Footer';
import Privacy from './pages/Privacy'

export {
  Hero,
  Navbar,
  About,
  Tech,
  Experience,
  Works,
  Feedbacks,
  Contact,
  EarthCanvas, 
  BallCanvas, 
  ComputersCanvas, 
  StarsCanvas,
  Footer, 
  Privacy
}

Footer.jsx:

import React from "react";
import { Link } from "react-router-dom";
import { styles } from "../styles";
import { logo } from "../assets";

const Footer = () => {
  return (
    <nav
      className={`${styles.paddingX} w-full flex items-center py-5 bg-primary`}
    >
      <div className="w-full flex justify-between items-center max-w-7xl mx-auto">
        <div className="flex items-center gap-2">
          <img src={logo} alt="logo" className="w-9 h-9 object-contain" />
          <p className="text-white/[0.6] text-[15px] font-bold cursor-pointer flex">
            Création Yann Cotard.
          </p>
        </div>
        <Link to="./pages/Privacy">
          <p className="text-white/[0.6] text-[15px] cursor-pointer flex">
            Politique de Confidentialité
          </p>
        </Link>
      </div>
    </nav>
  );
};

export default Footer;

我try 了react-router个文档中描述的所有方法,甚至向chat gpt寻求帮助,但都没有结果.

推荐答案

您没有为path="/pages/privacy"呈现任何路由,尽管您确实有一个具有相对路径"../src/components/pages/Privacy"的路由.您似乎对pathprops 在路由中所代表的含义感到困惑.它不是您想要呈现的文件的路径,而是将URL路径映射到您想要呈现的Reaction元素.

假设应用程序/路由是从根目录呈现的,例如"/",所以我的建议是呈现"/privacy"路由.

示例:

const App = () => {
  return (
    <div className="relative z-0 bg-primary">
      <div className="bg-hero-pattern bg-cover bg-no-repeat bg-center">
        <Navbar />
        <Hero />
      </div>

      <About />
      <Experience />
      <Tech />
      <Works />
      <Feedbacks />

      <div className="relative z-0">
        <Contact />
        <StarsCanvas />
      </div>

      <Footer />
      <Routes>
        <Route path="/privacy" element={<Privacy />} />
      </Routes>
    </div>
  );
};

Footer显然应该链接到正确的道路上.不使用相对链接目标路径,而使用绝对路径,例如to="/privacy".

const Footer = () => {
  return (
    <nav ... >
      <div ... >
        ...
        <Link to="/privacy">
          ...
        </Link>
      </div>
    </nav>
  );
};

然而,使用上面的App代码,所有正常内容(101, 102, 103, ..., 104)都是无条件呈现的,当URL路径为"/privacy"时,Privacy组件将呈现在页脚下方.如果你真的希望隐私页面是它自己的页面,并且在页脚之上,那么你可能会想要把其他内容也呈现在its自己的页面上,除了导航和页脚这样的常见组件.

示例:

const App = () => {
  return (
    <div className="relative z-0 bg-primary">
      <div className="bg-hero-pattern bg-cover bg-no-repeat bg-center">
        <Navbar />
        <Hero />
      </div>

      <Routes>
        <Route
          path="/"
          element={(
            <>
              <About />
              <Experience />
              <Tech />
              <Works />
              <Feedbacks />

              <div className="relative z-0">
                <Contact />
                <StarsCanvas />
              </div>
            </>
          )}
        />
        <Route path="/privacy" element={<Privacy />} />
      </Routes>

      <Footer />
    </div>
  );
};

Javascript相关问答推荐

禁用从vue.js 2中的循环创建的表的最后td的按钮

我不知道为什么我的JavaScript没有验证我的表单

React:未调用useState变量在调试器的事件处理程序中不可用

模块与独立组件

单击子元素时关闭父元素(JS)

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

我可以从React中的出口从主布局调用一个处理程序函数吗?

如何在mongoose中链接两个模型?

实现JS代码更改CSS元素

如何在输入元素中附加一个属性为checkbox?

保持物品顺序的可变大小物品分配到平衡组的算法

我在Django中的视图中遇到多值键错误

有条件重定向到移动子域

为什么JPG图像不能在VITE中导入以进行react ?

MongoDB受困于太多的数据

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

在Vercel中部署Next.js项目时获取`ReferenceError:未定义文档`

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?

ReactJS Sweep Line:优化SciChartJS性能,重用wasmContext进行多图表渲染