You appear to be using an ad blocker. We rely on advertising to fund this free service.
Please disable your ad blocker for our site to continue.
How to disable your ad blocker:
Click the AdBlock icon in your browser extensions.
Select "Don't run on pages on this site".
Click "Exclude".
Screenshot: AdBlock disable instructions
Click the AdBlock Plus icon in your browser extensions.
Click the blue toggle switch next to "This website" so it turns gray.
Screenshot: AdBlock Plus disable instructions
Click the uBlock Origin icon in your browser extensions.
Click the large blue power button. It will turn gray.
Screenshot: uBlock Origin disable instructions
Find your ad blocker icon (usually in the top right corner).
Follow its specific instructions to disable it for this site (often called "whitelisting" or "pausing").
Check DNS / Router Settings
Ad blocking might be happening at your network level (DNS settings on your phone/router or a network-wide blocker like Pi-hole).
Check your device's Wi-Fi / network settings for custom DNS servers (like Cloudflare, Google DNS, or AdGuard DNS). Try changing to your ISP's default DNS or another standard provider.
Check your router's configuration page (often 192.168.1.1 or similar) for DNS or parental control settings that might be blocking ads.
If using a network-wide blocker (like Pi-hole), consult its documentation to whitelist this site.
Template literals with multi-line content and embedded expressions. Mind the backtick key.
Part 1 of 1
const query = `SELECT u.id, u.name, COUNT(o.id) AS order_count FROM users u LEFT JOIN orders o ON o.user_id = u.id WHERE u.created_at > '${startDate}' GROUP BY u.id LIMIT ${pageSize} OFFSET ${page * pageSize}`;
WPM0
Accuracy100%
Progress0%
Streak0🔥
SpeedTarget: 30 WPM
▼
⏱️Start typing...
⚠️Continue typing or resetting in 3...
🏆NEW BEST!
ES6 Class
A class with constructor, getter, and method. Private fields with # are the newer part to nail.
Part 1 of 1
class EventBus { #listeners = new Map(); on(event, fn) { if (!this.#listeners.has(event)) this.#listeners.set(event, []); this.#listeners.get(event).push(fn); } emit(event, data) { this.#listeners.get(event)?.forEach(fn => fn(data)); } }
WPM0
Accuracy100%
Progress0%
Streak0🔥
SpeedTarget: 28 WPM
▼
⏱️Start typing...
⚠️Continue typing or resetting in 3...
🏆NEW BEST!
Import / Export
Named and default exports with re-exports. Getting module syntax right without thinking about it is a real skill.
Part 1 of 1
import React, { useState, useEffect, useCallback } from 'react'; import { formatDate, parseISO } from 'date-fns'; export { default as UserCard } from './UserCard'; export * from './utils';