facebookexperimental/Recoil
 Watch   
 Star   
 Fork   
2023-03-02 23:52:13
Recoil

0.7.7

  • Fix potential unhandled promise rejection in useRecoilCallback() (#2075)
  • Add OSS support for GateKeeper feature toggling via RecoilEnv.RECOIL_GKS_ENABLED (#2078)
  • Fix resolving suspense of async selectors used with SSR (#2073, #1960)
  • Fix SSR with some versions of React DOM used with Next.JS 13 (#2082, #2086)
2022-10-07 10:28:31
Recoil

0.7.6

  • Expose flag to disable "duplicate atom key" checking / logging, as it was too noisy in environments such as NextJS or some dev environments using Fast Refresh. (#733, #2020, #2046)
    • Import RecoilEnv from the recoil package, and set RecoilEnv.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED = false in code to disable the checking and logging.
    • We also support process.env.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED=false in NodeJS environments such as NextJs
    • Caution: This disables all checks for duplicate atom keys including legitimate errors, so use with caution!
  • Workaround for React 18 environments with nested renderers that don't support useSyncExternalStore(). (#2001, #2010)
2022-08-12 02:18:35
Recoil

0.7.5

  • Fix useRecoilSnapshot() with React's Fast Refresh during development (#1891)
  • Fix useRecoilSnapshot() and recoil-sync with changed browser behavior starting with Chrome v104 (#1943, #1936)
2022-06-21 11:28:58
Recoil

0.7.4

  • Fix missing Flow types (#1857)
  • Cleanup memory leak when using atoms with selector defaults. (#1821, #1840, #1844)
2022-06-01 07:57:31
Recoil

0.7.3

  • Enable atoms and selectors to be used in family parameters (#1172)
  • Add parentStoreID_UNSTABLE to atom effects which is the ID of the parent store it cloned from, such as the host <RecoilRoot> store for useRecoilCallback() snapshots. (#1744)
  • Atom effects can initialize or set atoms to wrapped values (#1681)
2022-04-14 08:02:51
Recoil

0.7.2

  • Selector cache lookup optimizations (#1720, #1736)
  • Allow async selectors to re-evaluate when async dependencies are discovered with stale state (#1736)
2022-04-13 10:25:33
Recoil

0.7.1

Typing

  • Add explicit children prop to <RecoilRoot> and useRecoilBridgeAcrossReactRoots_UNSTABLE() for TypeScript for @types/react with React 18 (#1718, #1717, #1726, #1731)
  • Update typing for family parameters to better support Map, Set, and classes with toJSON(). (#1709, #1703)

Fixes

  • Avoid dev-mode console error with React 18 when using shared async selectors across multiple <RecoilRoot>'s. (#1712)
  • Cleanup potential memory leak when using async selectors. (#1714)
  • Fix potentially hung async selectors when shared across multiple roots that depend on atoms initialized with promises that don't resolve. (#1714)
2022-03-25 01:19:33
Recoil

0.7.0

New Features

  • The default value is now optional for atom() and atomFamily(). If not provided the atom will initialize to a pending state. (#1639)
  • Add getStoreID() method to Snapshot (#1612)
  • Publish RecoilLoadable.loading() factory for making an async Loadable which never resolves. (#1641)

Breaking Changes

  • Selector's get() and Atom's default can now accept a Loadable to put the node in that state. If you wish to store a Loadable, Promise, or RecoilValue directly you can wrap it with selector.value() or atom.value(). (#1640)
  • useRecoilCallback() now provides a snapshot for the latest state when the callback is called instead of the latest rendered state, which had issues (#1610, #1604)

Improvements / Optimizations

  • Automatically retain snapshots for the duration of async callbacks. (#1632)
  • Optimization for more selector dependencies. 2x improvement with 100 dependencies, 4x with 1,000, and now able to support 10,000+. (#1651, #1515, #914)
  • Better error reporting when selectors provide inconsistent results (#1696)

Fixes

  • Avoid spurious console errors from effects when calling setSelf() from onSet() handlers. (#1589, #1582)
  • Freezing user values in dev mode now works in JS environments without the Window interface. (#1571)
2022-02-01 05:02:20
Recoil

0.6.1

Fix postInstall script

2022-01-29 14:16:48
Recoil

0.6.0

React 18

  • Leverage new React 18 APIs for improved safety and optimizations. (#1488)
  • Fixes for <StrictMode> (#1473, #1444, #1509).
  • Experimental support for useTransition() using hooks with _TRANSITION_SUPPORT_UNSTABLE suffix. (#1572, #1560)
  • Recoil updates now re-render earlier:
    • Recoil and React state changes from the same batch now stay in sync. (#1076)
    • Renders now occur before transaction observers instead of after.

New Features

  • Add refresh() to the useRecoilCallback() interface for refreshing selector caches. (#1413)
  • Callbacks from selector's getCallback() can now mutate, refresh, and transact Recoil state, in addition to reading it, for parity with useRecoilCallback(). (#1498)
  • Recoil StoreID's for <RecoilRoot> and Snapshot stores accessible via useRecoilStoreID() hook (#1417) or storeID parameter for atom effects (#1414).
  • RecoilLoadable.all() and RecoilLoadable.of() now accept either literal values, async Promises, or Loadables. (#1455, #1442)
  • Add .isRetained() method for Snapshots and check if snapshot is already released when using .retain() (#1546)

Other Fixes and Optimizations

  • Reduce overhead of snapshot cloning
    • Only clone the current snapshot for callbacks if the callback actually uses it. (#1501)
    • Cache the cloned snapshots from callbacks unless there was a state change. (#1533)
  • Fix transitive selector refresh for some cases (#1409)
  • Fix some corner cases with async selectors and multiple stores (#1568)
  • Atom Effects
    • Run atom effects when atoms are initialized from a set during a transaction from useRecoilTransaction_UNSTABLE() (#1466, #1569)
    • Atom effects are cleaned up when initialized by a Snapshot which is released. (#1511, #1532)
    • Unsubscribe onSet() handlers in atom effects when atoms are cleaned up. (#1509)
    • Call onSet() when atoms are initialized with <RecoilRoot initializeState={...} > (#1519, #1511)
  • Avoid extra re-renders in some cases when a component uses a different atom/selector. (#825)
  • <RecoilRoot> will only call initializeState() once during the initial render. (#1372)
  • Lazily compute the properties of useGetRecoilValueInfo_UNSTABLE() and Snapshot#getInfo_UNSTABLE() results (#1549)
  • Memoize the results of lazy proxies. (#1548)

Breaking Changes

  • Rename atom effects from effects_UNSTABLE to just effects, as the interface is mostly stabilizing. (#1520)
  • Atom effect initialization takes precedence over initialization with <RecoilRoot initializeState={...} >. (#1509)
  • useGetRecoilValueInfo_UNSTABLE() and Snapshot#getInfo_UNSTABLE() always report the node type. (#1547)