es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React router dom enrutando a ItemDetail

Estoy haciendo un proyecto personal de React.js. Estoy tratando de usar react-router-dom, pero no he podido hacer que funcione. Hice el BrowserRouter en App.js. Hasta ahí la aplicación funciona bien, pero no puedo hacer que la ruta redirija dinámicamente a un elemento de mapa. Intenté seguir la documentación y algunos tutoriales sin éxito. Los datos provienen de la API de Star Wars. Este es el código:
App.js:

import './App.css';    
import { Route, BrowserRouter as Router, Routes } from "react-router-dom";    
import Home from './components/Home';
import MovieDetail from './components/MovieDetail'
import Navbar from './components/Navbar';

function App() {
  return (
    <router>
      <>
      <navbar></navbar>
        <routes>
            <route exact="" path='/' element=""></route><home></home>} />
        </routes>    
        <routes>
            <route exact="" path="" to='/:movieId' element=""></route><moviedetail></moviedetail>} />
        </routes> 

    </router>  
  );
}

export default App;

MovieDetail:

import { useEffect, useState } from "react";    
import { useParams } from "react-router-dom";

const MovieDetail = () => {
    const { movieId } = useParams();

    const [result, setResult] = useState([]);

    const fetchData = async () => {
        const res = await fetch("https://www.swapi.tech/api/films/");
        const json = await res.json();
        setResult(json.result);
    }
    useEffect(() => {
        fetchData();
    }, []);

    let movieMatch = (result.find(value) => value.properties.title == movieId)

    return (
        <div>
            <h2>
            {result
            .find((value) => {value.properties.title == movieId})}
            </h2>
        </div>
    );
}

export default MovieDetail;

ACTUALIZACIÓN
Este es un enlace al código completo en codesandbox con App.js actualizado

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para redirigir dinámicamente el enrutamiento a un elemento de mapa utilizando react-router-dom, hay algunas cosas que deben corregirse en el código proporcionado:

    1. En la Ruta para el detalle de la película en App.js, cambie “path to” por solo “path”.
      <route exact="" path='/:movieId' element=""></route><moviedetail></moviedetail>} />
      
    2. En MovieDetail.js, movieMatch necesita utilizar filter() en lugar de find(), y title debe ser accedido como value.properties.title.
      let movieMatch = result.filter(value => value.properties.title === movieId)
      
    3. Para mostrar el título de la película, acceda al objeto properties y a la propiedad title del primer elemento en movieMatch.
      <h2>{movieMatch.length > 0 ? movieMatch[0].properties.title : "Película no encontrada"}</h2>
      

    Con estos cambios, el título de la película debería mostrarse dinámicamente según el parámetro movieId en la URL.

Comments are closed.