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.

Rechazo no controlado (TypeError): No se pueden leer propiedades indefinidas (leyendo ‘params’)

Estoy obteniendo un error al mostrar un producto individual en pantalla, el error se indica como:

Unhandled Rejection (TypeError): No se pueden leer las propiedades de undefined (leyendo 'params')

El código que está causando el error es:

function ProductScreen({ match }) {
  const [product, setProduct] = useState({})

  useEffect(() => {
    const fetchProduct = async () => {
      const { data } = await axios.get(`/api/products/${match.params.id}`)
      setProduct(data)
    }

    fetchProduct()
  }, [match])
}

Creo que el error es de match.params.id, pero estoy teniendo dificultades para resolver el error. ¿Alguien sabe cómo solucionar este error?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error “Cannot read properties of undefined (reading ‘params’)” ocurre típicamente cuando el objeto ‘params’ no está definido.

    Al mirar el fragmento de código proporcionado, parece que el objeto ‘match’ se está pasando como un prop al componente ProductScreen. El objeto ‘match’ es proporcionado típicamente por el paquete react-router-dom y contiene información sobre cómo una ruta específica coincide con la URL.

    Dado que el objeto ‘match’ puede tener diferentes propiedades dependiendo de la ruta, es posible que en algunos casos la propiedad ‘params’ no esté definida. Esto podría causar el error mencionado anteriormente.

    Una forma de resolver este error es agregar una comprobación para asegurarse de que la propiedad ‘params’ esté definida antes de usarla. Aquí hay un fragmento de código actualizado que incluye esta comprobación:

    function ProductScreen({ match }) {
      const [product, setProduct] = useState({})
    
      useEffect(() => {
        const fetchProduct = async () => {
          if (match && match.params && match.params.id) {
            const { data } = await axios.get(`/api/products/${match.params.id}`)
            setProduct(data)
          }
        }
    
        fetchProduct()
      }, [match])
    
      // resto del código del componente...
    }
    

    En este fragmento de código actualizado, estamos verificando si ‘match’, ‘params’ e ‘id’ están todos definidos antes de hacer la llamada a la API. Si alguna de estas propiedades no está definida, simplemente omitimos la llamada a la API.

    Esto debería resolver el error “Cannot read properties of undefined (reading ‘params’)”.

Comments are closed.