Не срабатывает useEffect при переходе через next.js

Мне нужно чтобы пользователь мог фильтровать полученные данные. Поиск + фильтр по производителям. Продукция поделена на категории(Арматура, Труба, и т.д). При переходе на другую категорию по <Link href=products/armatura/${item.category} /> не обновляются данные. Они обновляются только после перезагрузки страницы.

export default function Product(props) {

  const [dataLoaded, setDataLoaded] = useState(false)
  const [currentPage, setCurrentPage] = useState(1);
  const [productsPerPage, setProductsPerPage] = useState(20);
  const [dataProducts, setDataProducts] = useState(props.data)
  const [searchValue, setSearchValue] = useState('')

  useEffect(() => {
    if (props.data) setDataLoaded(true)
    setDataProducts(props.data)
  }, [])

  const filterByManufacturer = (selectedManufacturers) => {
    if (selectedManufacturers.length > 0) {
        const filteredProductsByMan = props.data.filter(p => selectedManufacturers.includes(p.manufacturer));
        setDataProducts(filteredProductsByMan);
    } else {
    setDataProducts(props.data)
    }
    setSearchValue('')
  }

  const onInputChange = (e) => {
    e.preventDefault();
    const filteredProducts = props.data.filter((product) =>
      product.name.toLowerCase().includes(e.target.value.toLowerCase()) ||
      product.manufacturer.toLowerCase().includes(e.target.value.toLowerCase())
    );
    setSearchValue(e.target.value)
    setDataProducts(filteredProducts)
  };

  const indexOfLastProduct = currentPage * productsPerPage;
  const indexOfFirstProduct = indexOfLastProduct - productsPerPage;
  const currentProducts = dataProducts.slice(indexOfFirstProduct, indexOfLastProduct);

  // Change Page
  const paginate = (pageNumber) => setCurrentPage(pageNumber);
  const changeProductsPerPage = (productsNumber) => setProductsPerPage(productsNumber);

  return(
    <Layout>
      <ContentHeader text={t('common:menu_products')} />
      <ContentMenu currentPage="suppliers" products={true} slug={props.slug} />
      <div className={`${utilStyles.content} ${styles.content}`}>
        <div className={utilStyles.container}>
          <SearchInput
            placeholder="Поиск..."
            onChange={onInputChange}
            value={searchValue}
          />
          { dataLoaded ?
            <ProductsTable products={currentProducts} manufacturers={props.manufacturers} filterByManufacturer={filterByManufacturer} />
          :
            <SkeletonTable />
          }
          <Pagination productsPerPage={productsPerPage} totalProducts={dataProducts.length} paginate={paginate} changeProductsPerPage={changeProductsPerPage} currentPage={currentPage} />
        </div>
      </div>
    </Layout>
  )
}

export async function getServerSideProps(context) {
  const req = context.req;
  const res = context.res;
  try {
    const id = context.params.id

    const result = await fetch('http://localhost:3000/api/products/' + id)
    const data = await result.json()

    data.sort((a,b) => {
      return a.size - b.size
    })

    var obj = {};
    var arr = [];
    for (var i=0; i < data.length; i++) {
      obj[data[i]['manufacturer']] = data[i];
    }
    arr = Object.keys(obj)
    let jsonObj = []
    arr.map((data, i) => {
      let newobj = {}
      newobj['text'] = data
      newobj['value']= data
      jsonObj.push(newobj)
    })

    return {
      props: {
        data: data, manufacturers: jsonObj, slug: id
      }
    }
  } catch {
    res.statusCode = 404
    return {
      props: {}
    }
  }
}

Ответы (0 шт):