mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
[Fresh] Always reset useMemoCache on Fast Refresh (#30700)
Stacked on https://github.com/facebook/react/pull/30662. Alternative to https://github.com/facebook/react/pull/30663 and https://github.com/facebook/react/pull/30677. During a Fast Refresh, we always want to evict the memo cache, same as we do with normal `useMemo`. The mechanism used by `useMemo` and other Hooks is this module-level variable:fca5d655d7/packages/react-reconciler/src/ReactFiberHooks.js (L304-L307)which has DEV-only behavior as if the dependencies are always different:fca5d655d7/packages/react-reconciler/src/ReactFiberHooks.js (L451-L460)The `useMemoCache` Hook doesn't use a dependency array but conceptually I think we want the same behavior. ## Test Plan The test passes. --------- Co-authored-by: Lauren Tan <poteto@users.noreply.github.com>
This commit is contained in:
@@ -1226,7 +1226,7 @@ function useMemoCache(size: number): Array<any> {
|
||||
updateQueue.memoCache = memoCache;
|
||||
|
||||
let data = memoCache.data[memoCache.index];
|
||||
if (data === undefined) {
|
||||
if (data === undefined || (__DEV__ && ignorePreviousDependencies)) {
|
||||
data = memoCache.data[memoCache.index] = new Array(size);
|
||||
for (let i = 0; i < size; i++) {
|
||||
data[i] = REACT_MEMO_CACHE_SENTINEL;
|
||||
|
||||
@@ -1637,8 +1637,7 @@ describe('ReactFreshIntegration', () => {
|
||||
}
|
||||
});
|
||||
|
||||
// eslint-disable-next-line jest/no-disabled-tests
|
||||
it.skip('resets useMemoCache cache slots', async () => {
|
||||
it('resets useMemoCache cache slots', async () => {
|
||||
if (__DEV__) {
|
||||
await render(`
|
||||
const useMemoCache = require('react/compiler-runtime').c;
|
||||
|
||||
Reference in New Issue
Block a user