@qtpy/use-ref-map 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +8 -8
- package/package.json +1 -1
package/README.md
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
| `getRef` | `(key: string) => RefObject<T>` | Возвращает ссылку (`RefObject`) для указанного ключа. Если ссылка не существует, создаётся новая с `current: null`. |
|
19
19
|
| `deleteRef` | `(key: string) => void` | Удаляет ссылку и соответствующий ключ из внутреннего хранилища. |
|
20
20
|
| `clearAllRefs` | `() => void` | Очищает все ссылки и ключи из внутреннего хранилища. |
|
21
|
-
| `
|
21
|
+
| `getAllKeys` | `() => string[]` | Возвращает массив всех ключей, связанных с существующими ссылками. |
|
22
22
|
|
23
23
|
## Использование
|
24
24
|
|
@@ -32,7 +32,7 @@ import useEvent from '@qtpy/use-event'; // хук для обработки со
|
|
32
32
|
import { useState } from 'react';
|
33
33
|
|
34
34
|
function ProjectsPage() {
|
35
|
-
const { getRef,
|
35
|
+
const { getRef, getAllKeys } = useRefMap<HTMLDivElement>();
|
36
36
|
const [activeIndex, setActiveIndex] = useState(0);
|
37
37
|
const projects = ['Проект 1', 'Проект 2', 'Проект 3'];
|
38
38
|
|
@@ -64,7 +64,7 @@ function ProjectsPage() {
|
|
64
64
|
))}
|
65
65
|
</div>
|
66
66
|
<p>Активный проект: {projects[activeIndex]}</p>
|
67
|
-
<p>Ключи ссылок: {
|
67
|
+
<p>Ключи ссылок: {getAllKeys.join(', ')}</p>
|
68
68
|
</div>
|
69
69
|
);
|
70
70
|
}
|
@@ -72,7 +72,7 @@ function ProjectsPage() {
|
|
72
72
|
|
73
73
|
Ссылка на хук [**useEvent**](https://www.npmjs.com/package/@qtpy/use-event)
|
74
74
|
|
75
|
-
В этом примере хук `useRefMap` используется для создания ссылок на элементы `<div>` с помощью метода `map` и ключей вида `project_${index}`. При прокрутке страницы хук `useEvent` проверяет положение каждого элемента через `getBoundingClientRect` и обновляет `activeIndex`, если элемент выходит за верхнюю границу окна, подсвечивая активный проект. Список ключей выводится через `
|
75
|
+
В этом примере хук `useRefMap` используется для создания ссылок на элементы `<div>` с помощью метода `map` и ключей вида `project_${index}`. При прокрутке страницы хук `useEvent` проверяет положение каждого элемента через `getBoundingClientRect` и обновляет `activeIndex`, если элемент выходит за верхнюю границу окна, подсвечивая активный проект. Список ключей выводится через `getAllKeys`.
|
76
76
|
|
77
77
|
### Императивное управление (вызов метода компонента)
|
78
78
|
|
@@ -135,11 +135,11 @@ function Component() {
|
|
135
135
|
import useRefMap from '@qtpy/use-ref-map';
|
136
136
|
|
137
137
|
function Component() {
|
138
|
-
const { getRef, clearAllRefs,
|
138
|
+
const { getRef, clearAllRefs, getAllKeys } = useRefMap<HTMLElement>();
|
139
139
|
|
140
140
|
const clearRefs = () => {
|
141
141
|
clearAllRefs();
|
142
|
-
console.log('Все ссылки очищены. Текущие ключи:',
|
142
|
+
console.log('Все ссылки очищены. Текущие ключи:', getAllKeys());
|
143
143
|
};
|
144
144
|
|
145
145
|
return (
|
@@ -147,7 +147,7 @@ function Component() {
|
|
147
147
|
<section ref={getRef('section1')}>Секция 1</section>
|
148
148
|
<section ref={getRef('section2')}>Секция 2</section>
|
149
149
|
<button onClick={clearRefs}>Очистить все ссылки</button>
|
150
|
-
<p>Ключи: {
|
150
|
+
<p>Ключи: {getAllKeys().join(', ')}</p>
|
151
151
|
</div>
|
152
152
|
);
|
153
153
|
}
|
@@ -161,10 +161,10 @@ function Component() {
|
|
161
161
|
import useRefMap from '@qtpy/use-ref-map';
|
162
162
|
|
163
163
|
function Component() {
|
164
|
-
const { getRef,
|
164
|
+
const { getRef, getAllKeys } = useRefMap<HTMLElement>();
|
165
165
|
|
166
166
|
const logKeys = () => {
|
167
|
-
console.log('Текущие ключи:',
|
167
|
+
console.log('Текущие ключи:', getAllKeys());
|
168
168
|
};
|
169
169
|
|
170
170
|
return (
|
@@ -172,7 +172,7 @@ function Component() {
|
|
172
172
|
<section ref={getRef('section1')}>Секция 1</section>
|
173
173
|
<section ref={getRef('section2')}>Секция 2</section>
|
174
174
|
<button onClick={logKeys}>Вывести ключи</button>
|
175
|
-
<p>Ключи: {
|
175
|
+
<p>Ключи: {getAllKeys().join(', ')}</p>
|
176
176
|
</div>
|
177
177
|
);
|
178
178
|
}
|
@@ -189,7 +189,7 @@ export type RefMapMethods<T> = {
|
|
189
189
|
getRef: (key: string) => RefObject<T>;
|
190
190
|
deleteRef: (key: string) => void;
|
191
191
|
clearAllRefs: () => void;
|
192
|
-
|
192
|
+
getAllKeys: () => string[];
|
193
193
|
};
|
194
194
|
|
195
195
|
export type UseRefMapReturn<T, E extends keyof RefMapMethods<T>> = Pick<RefMapMethods<T>, E>;
|
@@ -205,5 +205,5 @@ export type UseRefMapReturn<T, E extends keyof RefMapMethods<T>> = Pick<RefMapMe
|
|
205
205
|
- **Инициализация ссылок**: Метод `getRef` создаёт новую ссылку с `current: null`, если ссылка для указанного ключа ещё не существует.
|
206
206
|
- **Типизация**: Хук поддерживает обобщённый тип `T` для работы с любыми типами данных (например, пользовательскими интерфейсами компонентов или `HTMLElement`). В отличие от предыдущей версии, `getRef` возвращает `RefObject<T>` вместо `RefObject<Partial<T>>`, предполагая, что `current` может быть `null`, но типизация остаётся строгой.
|
207
207
|
- **Управление памятью**: Метод `deleteRef` удаляет отдельные ссылки, а `clearAllRefs` очищает все ссылки, предотвращая утечки памяти. Хук автоматически очищает все ссылки при размонтировании компонента через `useEffect`.
|
208
|
-
- **Сохранение состояния**: Хук использует `useRef` для хранения ссылок и
|
209
|
-
- **Ограничение типизации**: Свойство `
|
208
|
+
- **Сохранение состояния**: Хук использует `useRef` для хранения ссылок и ключей.
|
209
|
+
- **Ограничение типизации**: Свойство `getAllKeys` возвращает `string[]`.
|
package/dist/index.cjs
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";const
|
1
|
+
"use strict";const c=require("react");function f(){const r=c.useRef({}),t=c.useRef(new Set),s=e=>(r.current[e]||(r.current[e]={current:null},t.current.add(e)),r.current[e]),n=e=>{r.current[e]&&(delete r.current[e],t.current.delete(e))},u=()=>{Object.keys(r.current).forEach(n)};return c.useEffect(()=>u,[]),{getRef:s,deleteRef:n,clearAllRefs:u,getAllKeys:()=>Array.from(t.current)}}module.exports=f;
|
package/dist/index.d.ts
CHANGED
@@ -4,7 +4,7 @@ export type RefMapMethods<T> = {
|
|
4
4
|
getRef: (key: string) => RefObject<T>;
|
5
5
|
deleteRef: (key: string) => void;
|
6
6
|
clearAllRefs: () => void;
|
7
|
-
|
7
|
+
getAllKeys: () => string[];
|
8
8
|
};
|
9
9
|
export default function useRefMap<T>(): RefMapMethods<T>;
|
10
10
|
export type UseRefMapReturn<T, E extends keyof RefMapMethods<T>> = Pick<RefMapMethods<T>, E>;
|
package/dist/index.mjs
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
import { useRef as
|
2
|
-
function
|
3
|
-
const r =
|
1
|
+
import { useRef as u, useEffect as s } from "react";
|
2
|
+
function o() {
|
3
|
+
const r = u({}), t = u(/* @__PURE__ */ new Set()), f = (e) => (r.current[e] || (r.current[e] = { current: null }, t.current.add(e)), r.current[e]), n = (e) => {
|
4
4
|
r.current[e] && (delete r.current[e], t.current.delete(e));
|
5
5
|
}, c = () => {
|
6
|
-
Object.keys(r.current).forEach(n)
|
6
|
+
Object.keys(r.current).forEach(n);
|
7
7
|
};
|
8
|
-
return
|
9
|
-
getRef:
|
8
|
+
return s(() => c, []), {
|
9
|
+
getRef: f,
|
10
10
|
deleteRef: n,
|
11
11
|
clearAllRefs: c,
|
12
|
-
|
12
|
+
getAllKeys: () => Array.from(t.current)
|
13
13
|
};
|
14
14
|
}
|
15
15
|
export {
|
16
|
-
|
16
|
+
o as default
|
17
17
|
};
|