Как динамически связать изображение со страницей с помощью React Router Dom?

#reactjs #react-router-dom #image-gallery

#реагирует на #реагировать-маршрутизатор-дом #галерея изображений

Вопрос:

У меня есть галерея изображений для портфолио веб-сайтов, и я пытаюсь сделать ссылку на каждое изображение на другую страницу в React с помощью react-router-dom, но, похоже, я не могу понять, что не так с кодом.

Последние 3 дня я ломал голову над этим, пробовал разные подходы, но безрезультатно. Кто-нибудь может мне помочь, пожалуйста? Я довольно новичок в программировании.

Это страница моего приложения, на которой я объявил свои маршруты

 import './App.css'; import { BrowserRouter as Router, Routes, Route} from "react-router-dom"; import Inicio from './components/Routes/Inicio/Inicio'; import Trabalhos from './components/Routes/Trabalhos/Trabalhos'; import Navbar from './components/Navbar/Navbar'; // import Footer from './components/Footer/Footer'; import Contactos from './components/Routes/Contactos/Contactos'; // import ErrorPage from './components/Routes/ErrorPage/ErrorPage'; import Imagem from './components/Routes/Trabalhos/Imagem';   function App() {  return (  lt;Routergt;  lt;Navbar/gt;  lt;Routesgt;  lt;Route path="/" element={lt;Inicio/gt;} /gt;  lt;Route path="trabalhos" element={lt;Trabalhos/gt;} /gt;  lt;Route path=":imagemid" element={lt;Imagem/gt;} /gt;      lt;Route path="contactos" element={lt;Contactos/gt;}/gt;  {/* lt;Route path="*" element={lt;ErrorPage/gt;} /gt; */}  lt;/Routesgt;  {/* lt;Footer /gt; */}  lt;/Routergt;  ); }  export default App;  

Страница галереи:

 import React from 'react'; import "./trabalhos.css"; import thumbnails from '../../thumbnails'; import Thumbs from './Thumbs'; import { Link } from "react-router-dom";   function Trabalhos() {      return (  lt;div className="trabalhos"gt;    {thumbnails.map((novaImagem)=gt; (  lt;Link to ={`imagemid/${novaImagem.nome}`}gt;    {lt;Thumbs   key = {novaImagem.key}  url = {novaImagem.url}  nome = {novaImagem.nome}  titulo = {novaImagem.titulo}  desc = {novaImagem.desc}  /gt; }  lt;/Linkgt;   ))}   lt;/divgt;  ) }  export default Trabalhos  

The component I’m importing and mapped in the gallery page. The information I’m mapping is on a seperate js file.

 import React from 'react';    function Thumbs(props) {    return (  lt;div className="thumbs"gt;       lt;img src={props.url} alt={props.nome} /gt;    lt;div className="contentor"gt;    lt;h3gt;{props.titulo}lt;/h3gt;  lt;pgt;{props.desc}lt;/pgt;    lt;/divgt;      lt;/divgt;  ) }  export default Thumbs;  

Страница, которую я хочу визуализировать динамически

 import React from 'react'; import "./imagem.css"; import { useParams } from "react-router-dom";    function Imagem() {   const { imagemid } = useParams();   return (  lt;div className="imagem"gt;  lt;h1gt;The work name is - {imagemid}lt;/h1gt;  lt;/divgt;  ) }  export default Imagem  

Заранее спасибо.

Ответ №1:

Trabalhos Компонент сопоставляет миниатюры с путем "/imagemid/${novaImagem.nome}"

 lt;Link to ={`imagemid/${novaImagem.nome}`}gt;  ... lt;/Linkgt;  

Но для этого пути нет соответствующего соответствующего маршрута. Ближайший lt;Route path=":imagemid" element={lt;Imagem/gt;} /gt; — это место, где вы пытаетесь получить доступ imagemid к параметру соответствия.

Если это так, то path реквизит должен соответствовать тому, на что вы пытаетесь установить ссылку.

 lt;Route path="/imagemid/:imagemid" element={lt;Imagem/gt;} /gt;