Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

64
Views
eslint quiere que agregue una dependencia a useEffect pero hacerlo causa un ciclo infinito

Aprecio que este sea un problema común aquí, pero me cuesta pensar en una solución para mi situación particular. Mi código funciona según lo previsto, pero recibo una advertencia de eslint sobre la dependencia que falta en useEffect . La dependencia que falta es una función que envía el estado al padre, pero si la agrego como dependencia, provoca un bucle infinito.

Aquí está mi componente secundario CheckboxGroup.js :

El itemId y el estado comprobado se checkedState de su elemento secundario (CheckboxItem.js) y el estado de selectedItemIds se actualiza. Luego usé useEffect porque los ID de elementos selectedItemIds deben transferirse a su elemento principal (App.js) de inmediato. Como puede ver, falta onSelectHandler en su lista de dependencias.

 const CheckboxGroup = (props) => {
 const categoryName = props.items[0].category;

 const [selectedItemIds, setSelectedItemIds] = useState([
 ...props.defaultCheckboxIds,
 ]);

 const clickHandler = (itemId, checkedState) => {
 checkedState
 ? setSelectedItemIds((prev) => [...prev, itemId])
 : setSelectedItemIds((prev) => prev.filter((c) => c !== itemId));
 };

 //destructure prop
 const onSelectHandler = props.onSelectHandler;

 useEffect(() => {
 onSelectHandler(categoryName, selectedItemIds)
 }, [categoryName, selectedItemIds]);

 return (
 <ul className="card__inner">
 {props.items.map((item) => {
 return (
 <CheckboxItem
 isChecked={selectedItemIds.includes(item.id)}
 id={item.id}
 name={item.name}
 price={item.price}
 category={item.category}
 key={item.id}
 onClick={clickHandler}
 />
 );
 })}
 </ul>
 );
};

Aquí está la función en App.js que recibe los datos y luego actualiza el estado de las selections .

 const [selections, setSelections] = useState({
 chairs: 2,
 tables: 8,
 "large tables": [10, 12]
 });

 const selectionHandler = (selectedCategoryName, selectedItemIds) => {
 setSelections((prev) => ({
 ...prev,
 [selectedCategoryName]: selectedItemIds,
 }));
 };

Entonces, me pregunto si hay alguna manera de incluir la dependencia en useEffect sin que se active un bucle infinito o si hay una forma alternativa de levantar el estado, ¿quizás sin useEffect ?

Cualquier ayuda apreciada, gracias.

almost 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puede usaruseCallback de React para memorizar selectionHandler . De esta manera, puede agregarlo de manera segura en la matriz de dependencia:

 import { useCallback } from "react";
 const selectionHandler = useCallback((selectedCategoryName, selectedItemIds) => {
 setSelections((prev) => ({
 ...prev,
 [selectedCategoryName]: selectedItemIds,
 }));
}, []);
almost 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!