Skip to content

Commit f6e686f

Browse files
authored
Add useEffectEvent shim for easier strictmode development (#4345)
* Add useEffectEvent shim for easier strictmode development
1 parent e41501d commit f6e686f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

packages/@react-aria/utils/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ export {useValueEffect} from './useValueEffect';
3434
export {scrollIntoView, scrollIntoViewport} from './scrollIntoView';
3535
export {clamp, snapValueToStep} from '@react-stately/utils';
3636
export {isVirtualClick, isVirtualPointerEvent} from './isVirtualEvent';
37+
export {useEffectEvent} from './useEffectEvent';
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright 2023 Adobe. All rights reserved.
3+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License. You may obtain a copy
5+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
6+
*
7+
* Unless required by applicable law or agreed to in writing, software distributed under
8+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9+
* OF ANY KIND, either express or implied. See the License for the specific language
10+
* governing permissions and limitations under the License.
11+
*/
12+
13+
import {useCallback, useRef} from 'react';
14+
import {useLayoutEffect} from './useLayoutEffect';
15+
16+
export function useEffectEvent(fn) {
17+
const ref = useRef(null);
18+
useLayoutEffect(() => {
19+
ref.current = fn;
20+
}, [fn]);
21+
return useCallback((...args) => {
22+
const f = ref.current;
23+
return f(...args);
24+
}, []);
25+
}

0 commit comments

Comments
 (0)