• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

React Router

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 7 sierpnia 2022 w JavaScript przez ferdynand Obywatel (1,250 p.)

Dzień dobry,

Mam mały problem w związku z react-router, chce, aby po kliknieciu w dany Link np: "O nas" wysyłało uzytkownika do tej sekcji na stronie głównej, natomiast po kliknieciu owtiera mi ten komponent jako inna podstrone. Pewnie jest coś zle napisane... Mam komponent Home w kórym umieściłem cała apke... Juz przy tym chwile siedze.

import React from 'react'
import Navbar from "./Navbar";
import Hero from "./Hero";
import About from "./About";
import Offer from "./Offer";
import Contact from "./Contact";
import Footer from "./Footer";


function Home() {
  return (
    <div>
      <Navbar/>
      <Hero/>
      <About/>
      <Offer/>
      <Contact/>
      <Footer/>
    </div>
  )
}

export default Home

tutaj cały App, i poniżej Nav :

import {Routes, Route, Navigate } from "react-router-dom";
import Home from "./components/Home";
import Sweets from "./pages/Sweets";
import WeddingCakes from "./pages/WeedingCakes";
import BirthdayCakes from "./pages/BirthdayCakes";
import OccasionalCakes from "./pages/OccasionalCakes";
import OrderCake from "./pages/OrderCake";
import About from "./components/About";
import Offer from "./components/Offer";
import Contact from "./components/Contact";

const cakesForWeedings = [
  {
    id: "0",
    name: "Tort weselny",
    img: "/images/Slodki-stol/tort.jpg",
    about:
      "Lorem ipsum dolor sit amet consectetur adipisicing elit. Repudiandae, porro",
    portion: [
      { value: "Wybierz ilość", price: ""},
      { value: "8-9 porcji", price: "Cena: 300 zł"},
      { value: "13-15 porcji", price: "Cena: 500 zł"},
      { value: "20-23 porcji", price: "Cena: 700 zł"},
    ],
    taste: [
      { value: "Wybierz smak" },
      { value: "malinowy" },
      { value: "truskawkowy" },
      { value: "czekoladowy" },
    ],
  },
  {
    id: "1",
    name: "Torcik weselny",
    img: "/images/Torty/tort-jesien.jpg",
    about:
      "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Natus reprehenderit exercitationem eligendi vel, quo ut in. Quisquam est repudiandae ad",
      portion: [
        { value: "Wybierz ilość", price: ""},
        { value: "5-8 porcji", price: "Cena: 200 zł"},
        { value: "10-15 porcji", price: "Cena: 300 zł"},
        { value: "20-23 porcji", price: "Cena: 400 zł"},
      ],
      taste: [
        { value: "Wybierz smak" },
        { value: "bananowy" },
        { value: "truskawkowy" },
        { value: "waniliowy" },
      ],
  },
];

function App() {
  return (
    <div>
      <Routes>
        <Route path="/" element={<Home />}/>
        <Route path="/about" element={<About/>}/>
        <Route path="/offer" element={<Offer/>}/>
        <Route path="/contact" element={<Contact/>}/>
      
        <Route
          path="/torty-weselne"
          element={<WeddingCakes data={cakesForWeedings} />}
        />
        <Route path="/torty-urodzinowe" element={<BirthdayCakes />} />
        <Route path="/torty-okolicznosciowe" element={<OccasionalCakes />} />
        <Route path="/ciastka" element={<Sweets />} />
        <Route
          path="tort/:name"
          element={<OrderCake data={cakesForWeedings} />}
        />
          <Route
        path="*" element={<Navigate to="/" replace />}
    />
      </Routes>
      </div>
  );
}

export default App;

Nav:

import { useState } from "react";
import { TiArrowSortedDown } from "react-icons/ti";
import { Link } from "react-router-dom";

function Navbar() {
  const [open, setOpen] = useState(false);
  const [showList, setShowList] = useState(false);
  const [scroll, setScroll] = useState(false);

  
  const handleNav = () => {
    setOpen(!open);
    setScroll(!scroll);
    if (!scroll) {
      document.body.style.overflowY = "hidden";
      console.log('block')
    } else if (scroll) {
      document.body.style.overflowY = "scroll";
      console.log('scroll')
    }
  };
  const handleClick = () => {
    setOpen(!open);
    setScroll(!scroll);
    if (!scroll) {
      document.body.style.overflowY = "hidden";
      console.log("block");
    } else if (scroll) {
      document.body.style.overflowY = "scroll";
      console.log("scroll");
    }
  };
  const handleList = () => {
    setOpen(!open);
    setShowList(!showList);
    setScroll(!scroll);
    if (!scroll) {
      document.body.style.overflowY = "hidden";
      console.log("block");
    } else if (scroll) {
      document.body.style.overflowY = "scroll";
      console.log("scroll");
    }
  };

  return (
    <div className="w-full z-50 md:absolute top-0 left-0 sticky h-0">
      {/* nav-desktop */}
      <div className="hidden h-20 md:flex bg-rose-50 bg-opacity-80 absolute top-0 left-0 w-full">
        <ul className="flex w-full justify-around items-center">
          <li className="text-md text-slate-600 hover:text-slate-900 cursor-pointer">
            <Link to="/">Home</Link>
          </li>
          <li className="text-md text-slate-600 hover:text-slate-900 cursor-pointer">
            <Link to="/about">O nas</Link>
          </li>
          <li className="text-md text-slate-600 hover:text-slate-900 cursor-pointer">
            <Link to="/offer">Oferta</Link>
          </li>

          <li
            onClick={() => setShowList(!showList)}
            className={
              !showList
                ? "relative text-md text-slate-600 hover:text-slate-900 cursor-pointer flex items-center"
                : "relative text-md flex items-center text-slate-600 cursor-pointer"
            }
          >
            Torty{" "}
            <TiArrowSortedDown
              className={
                !showList
                  ? "ml-5 mt-[4px] text-xl transition-all z-50"
                  : "transition-all rotate-180 ml-5 mt-[4px] text-xl"
              }
            />
            <ul
              className={
                showList
                  ? "visible opacity-100 absolute  top-14 left-0 text-slate-600 px-4 py-4 transition-all duration-200 ease-in bg-rose-50 bg-opacity-60 rounded-lg"
                  : "invisible opacity-0 absolute top-12 left-0 text-slate-600 py-4 px-4 transition-all duration-200 ease-in bg-rose-50 bg-opacity-60 rounded-lg"
              }
            >
              <li
                onClick={() => setShowList(!showList)}
                className="hover:text-slate-900"
              >
                <Link to="/torty-weselne">Torty weselne</Link>
              </li>
              <li
                onClick={() => setShowList(!showList)}
                className="mt-2 hover:text-slate-900"
              >
                <Link to="/torty-urodzinowe">Torty urodzinowe</Link>
              </li>
              <li
                onClick={() => setShowList(!showList)}
                className="mt-2 hover:text-slate-900"
              >
                <Link to="/torty-okolicznosciowe">Torty okolicznościowe</Link>
              </li>
            </ul>
          </li>
          <li className="text-md text-slate-600 hover:text-slate-900 cursor-pointer">
            <Link to="/ciastka">Ciastka</Link>
          </li>
          <li className="text-md text-slate-600 hover:text-slate-900 cursor-pointer">
            <Link to="/contact">Kontakt</Link>
          </li>
        </ul>
      </div>
      {/* kontener na burger*/}
      <div className="md:hidden px-2 h-[50px] flex justify-end items-center">
        {/* burger-btn */}
        <div
          className="relative w-[26px] h-[20px] mr-4 z-50"
          onClick={handleNav}
        >
          <div
            className={
              open
                ? "absolute top-[calc(50%-2px)] rotate-45 w-full h-[4px] ease-in-out duration-300 rounded-full bg-slate-400"
                : "absolute w-full h-[4px] top-0 bg-slate-300 rounded-full ease-in-out duration-300"
            }
          ></div>
          <div
            className={
              open
                ? "absolute opacity-0 w-full h-[4px] bg-slate-400 rounded-full ease-in duration-200"
                : "absolute w-full h-[4px] top-[calc(50%-2px)] bg-slate-300 rounded-full ease-in duration-200"
            }
          ></div>
          <div
            className={
              open
                ? "absolute bottom-[calc(50%-2px)] -rotate-45 w-full h-[4px] ease-in-out duration-300 rounded-full bg-slate-400"
                : "absolute w-full h-[4px] bottom-0 bg-slate-300 rounded-full ease-in-out duration-300"
            }
          ></div>
        </div>
      </div>
      {/* nav-mobile */}
      <div
        className={
          open
            ? "md:hidden h-screen overflow-x-hidden absolute top-0 w-[100%]  z-30 right-0 duration-300 ease-in-out bg-rose-50 bg-opacity-[92%]"
            : "md:hidden h-screen overflow-x-hidden absolute top-0  right-[-100%] z-30 w-[100%] duration-300 ease-in-out bg-rose-50 bg-opacity-[92%]"
        }
      >
        <ul className="w-full h-full space-y-9 pt-10 z-50 pl-8">
          <li onClick={handleClick} className="text-md text-slate-600 cursor">
            <Link to="/">Home</Link>
          </li>
          <li
            onClick={handleClick}
            className="text-md text-slate-600 cursor-pointer"
          >
            <Link to="/about">O nas</Link>
          </li>
          <li
            onClick={handleClick}
            className="text-md text-slate-600 cursor-pointer"
          >
            <Link to="/">Oferta</Link>
          </li>
          <li
            onClick={() => setShowList(!showList)}
            className="text-md text-slate-600 relative cursor-pointer"
          >
            Torty{" "}
            <TiArrowSortedDown
              className={
                !showList
                  ? "text-xl absolute top-1 left-12 duration-100 ease-in"
                  : "duration-100 ease-in rotate-180 absolute text-xl top-1 left-12"
              }
            />
            <ul
              className={
                showList
                  ? "mt-5 space-y-5 opacity-100 visible transition-all duration-100 ease-in"
                  : "invisible opacity-0 transition-all ease-out space-y-5 h-0"
              }
            >
              <li onClick={handleList}>
                <Link to="/torty-weselne">Torty weselne</Link>
              </li>
              <li onClick={handleList} className="mt-2">
                <Link to="/torty-urodzinowe">Torty urodzinowe</Link>
              </li>
              <li onClick={handleList} className="mt-2">
                <Link to="/torty-okolicznosciowe">Torty okolicznościowe</Link>
              </li>
            </ul>
          </li>
          <li
            onClick={handleClick}
            className="text-md text-slate-600 cursor-pointer"
          >
            <Link to="/ciastka">Ciastka</Link>
          </li>
          <li
            onClick={handleClick}
            className="text-md text-slate-600 cursor-pointer"
          >
            <Link to="/">Kontakt</Link>
          </li>
        </ul>
      </div>
    </div>
  );
}

export default Navbar;

Bede wdzieczny za pomoc.

Milego dzionka :)

komentarz 7 sierpnia 2022 przez jankustosz1 Nałogowiec (35,880 p.)
Używasz BrowserRouter lub HashRouter?
komentarz 7 sierpnia 2022 przez Wiciorny Ekspert (270,170 p.)

@ferdynand, skecje... nie wykorzystuj do routingu... to wystarczy zwykła obsługa z tzw odniesieniem 
w HTMLU... nawet 
https://stackoverflow.com/questions/8424785/link-to-a-section-of-a-webpage#:~:text=Simple%3A,Use%20.


Skoro wszystko masz na 1 stronie, to wystarczy CI tzw. odnośnik do podsekcji. 

komentarz 7 sierpnia 2022 przez ferdynand Obywatel (1,250 p.)
Czyli poprostu umieścic to w <a href> ???

Ale czy wtedy tak jest poprawnie ? W sensie, jeśli używam router to wszystko powinno być w nim obsługiwane ?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 30 maja 2022 w JavaScript przez Zaqu93 Gaduła (4,850 p.)
0 głosów
0 odpowiedzi 52 wizyt
pytanie zadane 14 lutego w JavaScript przez JaaO Początkujący (490 p.)
0 głosów
0 odpowiedzi 183 wizyt

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...