EasyJavaScriptTypeScript

depsChanged — useEffect Deps

ReactHooksEquality

React's useEffect re-runs the effect when any dependency changes. The
comparison uses `Object.is` (not ===) for each element.

Implement solve(prevDeps, nextDeps):

  • If prevDeps is null (first render), return true.
  • If arrays have different lengths, throw 'Deps length mismatch'.
  • Return true if any element changed (using Object.is), false otherwise.
solve(null, [1, 'a'])         // true (first render)
solve([1, 'a'], [1, 'a'])     // false
solve([1, NaN], [1, NaN])     // false (Object.is(NaN, NaN) === true)

Sample tests

Test #1First render → always true
Input: [null,[1,"a"]]
Output: true
Test #2Same deps → false
Input: [[1,"a"],[1,"a"]]
Output: false
Test #3One dep changed → true
Input: [[1,"a"],[1,"b"]]
Output: true
Test #4NaN === NaN via Object.is → false
Input: [[1,null],[1,null]]
Output: false
Test #5Object.is(0, -0) is false → deps changed
Input: [[0],[0]]
Output: true