What is the difference between useMemo and useCallback?
The key difference is that useMemo memoizes returned values while useCallback memoizes functions. useMemo is used to memoize the result of a computation (like `useMemo(() => computeExpensiveValue(a, b), [a, b])`), whereas useCallback is used to memoize a function definition itself (like `useCallback(() => { doSomething(a, b) }, [a, b])`). useCallback(fn, deps) is equivalent to useMemo(() => fn, deps).