Реагируйте, показывая данные с вложенной маршрутизацией (id)

#reactjs

Вопрос:

Всем привет, есть ли кто-нибудь, кто знает, как я могу показать эти данные, потому что здесь это не работает для меня. Я сделал специальный крюк для извлечения данных. и теперь я хочу получить доступ ко всем различным продуктам с определенным идентификатором. например (категории/2). На картинке вы можете увидеть крючок и де product.js где я пытаюсь отобразить данные.

Однажды я получил сообщение об ошибке, что я должен поместить его в массив? Но я не понимаю, что это значит. Я получаю данные из api с базой данных mysql.

 import { useState, useEffect } from "react";

const useFetch = (url) => {
    const [data, setData] = useState(null)
    const [error, setError ] = useState(null)


useEffect(() => {
    setTimeout(() => {
        fetch(url) //custom url so you can reuse it
        .then(res => {
            if(!res.ok) {
                throw Error('could not fetch data');
            }
            return res.json();
        })
        .then(data =>  {
            setData(data);
        })
        .catch(err => {
            setError(null)
        })
    }, 1000);
}, [url]);

    return [data, error] //use properties with custom hook
}


export default useFetch;
 
 import React from "react";
import "../Style/menu.css";
import { useParams } from "react-router-dom";
import useFetch from "../ApiService/useFetch";
import ProductList from "../Components/ProductList";

const Product = () => {

    const { id } = useParams();
    const { data: product, error } = useFetch('http://localhost:8080/products/category/'   id);

        return (
            <div>
                {error amp;amp; <div>{ error } </div>}
                {product amp;amp; (
                    <h1>{product.name}</h1>
                )}
            </div>
        )
}

export default Product;
 

Комментарии:

1. Пожалуйста, используйте отформатированные блоки кода вместо скриншотов.

2. Хорошо, я просто добавил их

Ответ №1:

Ваш пользовательский хук возвращает массив, но вы пытаетесь его деконструировать. Тебе нужно измениться

 const { data: product, error } = useFetch('http://localhost:8080/products/category/'   id);
 

Для

 const [product, error] = useFetch('http://localhost:8080/products/category/'   id);
 

Комментарии:

1. Привет, Джон. Затем он говорит, что не может прочитать свойства null (имя чтения)

2. Извините, я отредактировал свой ответ и переименовал данные в продукт.

3. Эй, Джон, Это все еще не отображается. Та же ошибка (свойства null) при чтении имени

4. Вы зарегистрировали свой продукт в консоли?