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} |