Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

371
Visualizações
TypeError no capturado: la coincidencia no está definida
import books from '../books' function BookScreen({ match }) { const book = books.find((b) => b._id === match.params.id) return ( <div> {book} </div> ) } export default BookScreen

Sigo recibiendo el error de coincidencia indefinida. Vi un tutorial con un código similar, pero parecía estar bien cuando se puso a prueba. ¿Alguna pista de cuál podría ser el problema?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Si el accesorio de match no está definido, esto podría deberse a algunas cosas.

react-router-dom v5

Si usa RRDv5 si el accesorio de match no está definido, esto significa que BookScreen no está recibiendo los accesorios de ruta que se inyectan cuando un componente se procesa en el accesorio de component del componente de Route , o las funciones de render o accesorios children . Tenga en cuenta que al usar children , la ruta coincidirá y se representará independientemente; consulte los métodos de representación de rutas para obtener más detalles.

Asegúrese de que se implemente uno de los siguientes para acceder al objeto de match :

  1. Renderizar BookScreen en el accesorio de component de una Route

     <Route path="...." component={BookScreen} />
  2. Renderizar BookScreen en la función render o children prop de una Route y pasar los accesorios de ruta a través de

     <Route path="...." render={props => <BookScreen {...props} />} />

    o

     <Route path="...." children={props => <BookScreen {...props} />} />
  3. Decore BookScreen con el componente de orden superior withRouter para inyectar los accesorios de ruta

     import { withRouter } from 'react-router-dom'; function BookScreen = ({ match }) { const book = books.find((b) => b._id === match.params.id) return ( <div> {book} </div> ); }; export default withRouter(BookScreen);
  4. Dado que BookScreen es un componente de la función React, importe y use el useParams para acceder a los parámetros de coincidencia de ruta

     import { useParams } from 'react-router-dom'; ... function BookScreen() { const { id } = useParams(); const book = books.find((b) => b._id === id) return ( <div> {book} </div> ); }

react-router-dom v6

Si usa RRDv6, entonces no hay ningún accesorio de match . Atrás quedaron los accesorios de ruta. Aquí solo useParams y otros ganchos, así que utilícelos.

 import { useParams } from 'react-router-dom'; ... function BookScreen() { const { id } = useParams(); const book = books.find((b) => b._id === id) return ( <div> {book} </div> ); }

Si tiene otros componentes de clase y está utilizando RRDv6 y no desea convertirlos en componentes de función, deberá crear un componente personalizado de withRouter . Vea mi respuesta aquí con detalles.

about 4 years ago · Juan Pablo Isaza Relatório

0

Supongo que renderizó el componente BookScreen antes de que se inicialice la coincidencia. Esta es la razón por la que la coincidencia no está definida cuando se representa BookScreen. Renderizarlo condicionalmente como a continuación.

 return ( ... other components {match && <BookScreen match={match}/>} )

Además, dejo un sitio útil que le indica algunas buenas formas de hacerlo. :D

https://www.digitalocean.com/community/tutorials/7-ways-to-implement-conditional-rendering-in-react-applications

Espero que encuentres una respuesta :D

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda