Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

270
Vistas
React - how to declare this variable

I have this component that pretends to receive an ID of a category of products, make a call to the backend through an API and return the products of this category.

To do this, the first time I render the component I make a default call without optional parameters to the API and return 10 items for example.

But then I have some filters such as the price from, price to or the brand of the product that I collect these values ​​and send them to the API to return a JSON with the products.

For this reason I have created a "handleButtonCLick" function that aims to collect the values ​​of the filters (input box) and make an API call through post.

For this reason I have created a "handleButtonCLick" function that aims to collect the values ​​of the filters (input box) and make an API call through post.

import axios from 'axios'
import GuestLayout from '@/components/Layouts/GuestLayout'
import { useRouter } from 'next/router'
import { useEffect, useState } from 'react'

const Name = ({ itemsList }) => {
    const router = useRouter()

    //const [itemsList, setItemsList] = useState([])

    const handleButtonCLick = (event, value) => {

        const requestOptions = {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                category_id: 100,
            }),
        }

        fetch(
            `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/product/category/`,
            requestOptions,
        )
            .then(response => response.json())
            .then(json => setItemsList(json))
    }

    return (
        <GuestLayout>

            <div>
                {itemsList.map((x, i) => (
                      {x.price}€
                ))}
            </div>

            <div className="py-12">
                  <Button  variant="outlined"
                           onClick={handleButtonCLick}>
                           Search items
                  </Button>
            </div>
        </GuestLayout>
    )
}


Name.getInitialProps = async context => {

    let valor = 1;

    const { data } = await axios.post(
        `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/product/category/${valor}/`,
    )

    return { itemsList: data }
}

export default Name

I make the call but I don't know how to set the result obtained to "itemsList", because if I set it this way it tells me that I can't define it AGAIN

const [itemsList, setItemsList] = useState([])
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

You are trying to declare some React state with the same name as what has already been declared for a prop. Just use a different variable name. Use an useEffect hook to save the passed itemsList prop into state if/when it updates, and update the render to map the local items state.

import axios from 'axios';
import GuestLayout from '@/components/Layouts/GuestLayout';
import { useRouter } from 'next/router';
import { useEffect, useState } from 'react';

const Name = ({ itemsList }) => {
  const router = useRouter();

  const [items, setItems] = useState([]);

  useEffect(() => {
    setItems(itemsList);
  }, [itemsList]);

  const handleButtonCLick = (event, value) => {
    const requestOptions = {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        category_id: 100,
      }),
    }

    fetch(`${process.env.NEXT_PUBLIC_BACKEND_URL}/api/product/category/`,
      requestOptions,
    )
      .then(response => response.json())
      .then(json => setItems(json));
  }

  return (
    <GuestLayout>
      <div className="py-12">
        <div>
          {items.map((x, i) => (
            {x.price}€
          ))}
        </div>
      </div>
    </GuestLayout>
  );
}


Name.getInitialProps = async context => {
  let valor = 1;

  const { data } = await axios.post(`${process.env.NEXT_PUBLIC_BACKEND_URL}/api/product/category/${valor}/`);

  return { itemsList: data };
}

export default Name;
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda