Genereer aangepaste codefragmenten met Cursor voor specifieke taken
description
Maakt het mogelijk om zeer specifieke en geoptimaliseerde codefragmenten automatisch te genereren, wat tijd bespaart en handmatige programmeerfouten vermindert. Het gaat verder dan algemene code-aanvulling door zich te richten op taakgerichte, contextspecifieke code op maat van de gebruiker.
prompt
Help me aangepaste codefragmenten te genereren met Cursor voor de volgende programmeertaak of feature: <beschrijf de taak of feature ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een debounce functie in JavaScript die je kunt gebruiken voor input events, inclusief best practices en optimalisaties:
```javascript
function debounce(func, delay) {
let timerId;
return function(...args) {
const context = this;
clearTimeout(timerId); // Reset de timer bij elke nieuwe call
timerId = setTimeout(() => {
func.apply(context, args); // Voer de functie uit na de vertraging
}, delay);
};
}
// Voorbeeldgebruik:
// Selecteer het input element
const inputElement = document.querySelector('#mijnInput');
// Definieer de functie die je wilt debounce
function handleInputEvent(event) {
console.log('Input waarde:', event.target.value);
}
// Maak een gedeactiveerde versie van de functie met debounce
const debouncedInputHandler = debounce(handleInputEvent, 300);
// Voeg de event listener toe
inputElement.addEventListener('input', debouncedInputHandler);
```
**Best practices en optimalisaties:**
- Gebruik `clearTimeout` om meerdere snelle input events te minimaliseren.
- Bewaar de timerId in een closure zodat elke aangeroepen functie dezelfde timer gebruikt.
- Gebruik `apply` of `call` om de juiste context (`this`) en argumenten door te geven.
- Pas de debounce tijd (`delay`) aan op basis van gebruikerservaring en performantiebehoefte.
- Overweeg het gebruik van `passive: true` bij event listeners voor betere scrollprestaties, indien van toepassing.
- Gebruik arrow functions voor compactheid en behoud van lexical scope waar mogelijk.
Wil je dat ik het codefragment uitbreid of aanpas voor een specifieke situatie?
provider: deepseek
model: deepseek-chat
Zeker, hier is een gedebounceerde functie voor input events in JavaScript met best practices en optimalisaties:
```javascript
/**
* Debounce functie voor input events
* @param {Function} func - De uit te voeren functie
* @param {number} wait - Wachtijd in milliseconden
* @param {boolean} immediate - Of de functie onmiddellijk moet uitvoeren
* @returns {Function} Gedebounceerde functie
*/
function debounce(func, wait = 250, immediate = false) {
let timeoutId = null;
let lastArgs = null;
let lastThis = null;
// Cleanup functie voor event listeners
const cleanup = () => {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
}
};
// De gedebounceerde functie
const debounced = function(...args) {
const context = this;
lastArgs = args;
lastThis = context;
const later = () => {
timeoutId = null;
if (!immediate) {
func.apply(context, args);
}
};
const callNow = immediate && !timeoutId;
cleanup();
timeoutId = setTimeout(later, wait);
if (callNow) {
func.apply(context, args);
}
};
// Cancel methode om pending execution te annuleren
debounced.cancel = cleanup;
// Flush methode om direct uit te voeren
debounced.flush = () => {
cleanup();
if (lastArgs) {
func.apply(lastThis, lastArgs);
}
};
// Is pending check
debounced.isPending = () => timeoutId !== null;
return debounced;
}
// Gebruiksvoorbeeld met input event:
const searchInput = document.getElementById('search-input');
const resultsContainer = document.getElementById('results');
// De eigenlijke handler functie
function handleSearch(event) {
const searchTerm = event.target.value.trim();
if (searchTerm.length < 2) {
resultsContainer.innerHTML = '';
return;
}
// Simuleer API call of zware operatie
console.log('Zoeken naar:', searchTerm);
// fetchResults(searchTerm).then(showResults);
}
// Debounce de handler met 300ms vertraging
const debouncedSearch = debounce(handleSearch, 300);
// Event listener toevoegen
searchInput.addEventListener('input', debouncedSearch);
// Voor cleanup (bijvoorbeeld bij component unmount):
// searchInput.removeEventListener('input', debouncedSearch);
// debouncedSearch.cancel(); // Optioneel: cancel pending execution
```
**Best practices en optimalisaties:**
1. **Type Safety**: Duidelijke JSDoc comments voor betere IDE ondersteuning
2. **Flexibele Configuratie**: Aanpasbare wait tijd en immediate optie
3. **Memory Management**: Proper cleanup met cancel() methode
4. **Batching**: Voorkomt multiple executions tijdens rapid input
5. **Edge Case Handling**: Werkt correct met `this` context en arguments
6. **Utility Methods**: flush() en isPending() voor geavanceerd gebruik
7. **Performance**: Minimale overhead, gebruikt native setTimeout
8. **Reusable**: Generieke implementatie voor elk type event
**Gebruiksscenario's:**
- Search inputs met live results
- Window resize events
- Scroll events
- Form validatie
- API calls bij user input
Deze implementatie is productie-ready en volgt moderne JavaScript best practices.