yuchi / hooks.macro

☔️ Babel Macros for automatic React Hooks memoization invalidation
MIT License
357 stars 5 forks source link

Error/warn on known non-invariants #7

Open yuchi opened 5 years ago

yuchi commented 5 years ago

In the following example the current implementation outputs very useless code for useAutoMemo and useAutoCallback, and potentially un-performant code for effects:

function MyComponent({ prop }) {
  const config = { a: prop };
  return useAutoMemo(JSON.stringify(config));
}

The obvious reason is that config will always be different from the previous render. To “solve” it we need to wrap the object literal in useAutoMemo:

function MyComponent({ prop }) {
  const config = useAutoMemo({ a: prop });
  return useAutoMemo(JSON.stringify(config));
}

The macros should at least warn about this borderline situation.