|
1 | 1 | 'use client'; |
2 | 2 |
|
3 | | -import { useRef } from 'react'; |
4 | 3 | import * as React from 'react'; |
5 | 4 | import { classNames } from '@vkontakte/vkjs'; |
6 | 5 | import { mergeStyle } from '../../helpers/mergeStyle'; |
@@ -198,8 +197,8 @@ export const ImageBase: React.FC<ImageBaseProps> & { |
198 | 197 | const [loaded, setLoaded] = React.useState(false); |
199 | 198 | const [failed, setFailed] = React.useState(false); |
200 | 199 |
|
201 | | - const mouseOverHandlersRef = useRef<VoidFunction[]>([]); |
202 | | - const mouseOutHandlersRef = useRef<VoidFunction[]>([]); |
| 200 | + const [mouseOverHandlers] = React.useState<VoidFunction[]>([]); |
| 201 | + const [mouseOutHandlers] = React.useState<VoidFunction[]>([]); |
203 | 202 |
|
204 | 203 | const hasSrc = src || srcSet; |
205 | 204 | const fallbackIcon = failed || !hasSrc ? fallbackIconProp : null; |
@@ -245,20 +244,20 @@ export const ImageBase: React.FC<ImageBaseProps> & { |
245 | 244 | ); |
246 | 245 |
|
247 | 246 | const onMouseOver = () => { |
248 | | - mouseOverHandlersRef.current.forEach((fn) => fn()); |
| 247 | + mouseOverHandlers.forEach((fn) => fn()); |
249 | 248 | }; |
250 | 249 |
|
251 | 250 | const onMouseOut = () => { |
252 | | - mouseOutHandlersRef.current.forEach((fn) => fn()); |
| 251 | + mouseOutHandlers.forEach((fn) => fn()); |
253 | 252 | }; |
254 | 253 |
|
255 | 254 | const contextValue = React.useMemo( |
256 | 255 | () => ({ |
257 | 256 | size, |
258 | | - onMouseOverHandlers: mouseOverHandlersRef.current, |
259 | | - onMouseOutHandlers: mouseOutHandlersRef.current, |
| 257 | + onMouseOverHandlers: mouseOverHandlers, |
| 258 | + onMouseOutHandlers: mouseOutHandlers, |
260 | 259 | }), |
261 | | - [size], |
| 260 | + [mouseOutHandlers, mouseOverHandlers, size], |
262 | 261 | ); |
263 | 262 |
|
264 | 263 | const imgStyles: |
|
0 commit comments