stateMapper.ts (233cafa6d759d9d8f74658f7f6ae6d72949a2bc1) stateMapper.ts (4060c00a75883036bbd315fb25c90065209312b3)
1import {useEffect, useState} from 'react';
2
3export default class StateMapper<T> {
1import {useEffect, useState} from 'react';
2
3export default class StateMapper<T> {
4 private getFun: () => T;
5 private cbs: Set<Function> = new Set([]);
6 constructor(getFun: () => T) {
7 this.getFun = getFun;
8 }
4 private getFun: () => T;
5 private cbs: Set<Function> = new Set([]);
6 constructor(getFun: () => T) {
7 this.getFun = getFun;
8 }
9
9
10 notify = () => {
11 this.cbs.forEach(_ => _?.());
12 }
10 notify = () => {
11 this.cbs.forEach(_ => _?.());
12 };
13
13
14 useMappedState = () => {
15 const [_state, _setState] = useState<T>(this.getFun);
16 const updateState = () => {
17 _setState(this.getFun());
14 useMappedState = () => {
15 const [_state, _setState] = useState<T>(this.getFun);
16 const updateState = () => {
17 _setState(this.getFun());
18 };
19 useEffect(() => {
20 this.cbs.add(updateState);
21 return () => {
22 this.cbs.delete(updateState);
23 };
24 }, []);
25 return _state;
18 };
26 };
19 useEffect(() => {
20 this.cbs.add(updateState);
21 return () => {
22 this.cbs.delete(updateState);
23 };
24 }, []);
25 return _state;
26 }
27}
27}