You are seeing an ESLint warning (probably from react-hooks/exhaustive-deps) because you are using apiParameters inside the useEffect, but it's not in the dependency array.
👉 The problem:
apiParameterscomes from the component scope and is "stale" insideuseEffectwhen you usesetApiParameters({ ...apiParameters, models: data }).- ESLint suggests adding
apiParametersto the dependency array to ensure it stays up to date — but you don’t want that, because you want theuseEffectto run once (empty dependency[]).
Solution (safe pattern): Use functional update to avoid stale closure
React allows you to use this pattern:
setApiParameters((prev) => ({ ...prev, models: data }));👉 This way you do not need to depend on apiParameters, because you are always using the latest value.
Final optimized version (solves ESLint + keeps one-time run):
useEffect(() => {
let ignore = false;
async function fetchModel() {
try {
const response = await fetch("https://image.pollinations.ai/models");
if (!response.ok) {
console.log("Failed to Fetch Models");
return;
}
const data = await response.json();
if (!ignore) {
setApiParameters((prev) => ({ ...prev, models: data }));
}
} catch (error) {
console.log(error.message);
}
}
fetchModel();
return () => (ignore = true);
}, []); // still empty array — safe nowSummary:
✅ ESLint error will be gone — no need to add apiParameters to dependencies.
✅ Your effect still runs only once ([] dependency).
✅ Code works safely even if apiParameters changes in the future.
If you want, I can also explain why "functional update" solves the stale closure problem — just say if you want that too. Would you like to? 🚀