File tree Expand file tree Collapse file tree
apps/react-tools-demo/src
components/hooks/useLogger Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import { useState } from "react" ;
2+ import { useLogger } from "../../../../../../packages/react-tools/src" ;
3+
4+ /**
5+ The component uses _useLogger_ hook to trace component state in lifecycle events.
6+ */
7+ const Counter = ( props : { init : number } ) => {
8+ const [ state , setState ] = useState < number > ( props . init ) ;
9+ useLogger ( "Counter" , { state, props } ) ;
10+
11+ return ( < >
12+ < p > Counter is: { state } </ p >
13+ < button type = "button" onClick = { ( ) => setState ( t => t + 1 ) } > Increment</ button >
14+ < button type = "button" onClick = { ( ) => setState ( t => t - 1 ) } > Decrement</ button >
15+ </ > ) ;
16+ }
17+ export const UseLogger = ( ) => {
18+ const [ state , setState ] = useState ( 0 ) ;
19+ return < >
20+ < button type = "button" onClick = { ( ) => setState ( t => t + 1 ) } > Increment</ button >
21+ < br />
22+ < Counter init = { state } />
23+ </ >
24+ }
Original file line number Diff line number Diff line change @@ -28,7 +28,8 @@ export const COMPONENTS = [
2828 "useLayoutEffectDeepCompare" ,
2929 "useLayoutEffectOnce" ,
3030 "useRerender" ,
31- "useIsMounted"
31+ "useIsMounted" ,
32+ "useLogger"
3233 ] ,
3334 //PERFORMANCE
3435 [
Original file line number Diff line number Diff line change 1+ # useLogger
2+ Hook to log componet details during Lifecycle events.
3+
4+ ## Usage
5+
6+ ``` tsx
7+ const Counter = (props : {init: number }) => {
8+ const [state, setState] = useState <number >(props .init );
9+ useLogger (" Counter" , { state , props });
10+
11+ return (<>
12+ <p >Counter is: { state } </p >
13+ <button type = " button" onClick = { () => setState (t => t + 1 )} >Increment</button >
14+ <button type = " button" onClick = { () => setState (t => t - 1 )} >Decrement</button >
15+ </>);
16+ }
17+ export const UseLogger = () => {
18+ const [state, setState] = useState (0 );
19+ return <>
20+ <button type = " button" onClick = { () => setState (t => t + 1 )} >Increment</button >
21+ <br />
22+ <Counter init = { state } />
23+ </>
24+ }
25+ ```
26+
27+ > The component uses _ useLogger_ hook to trace component state in lifecycle events.
28+
29+
30+ ## API
31+
32+ ``` tsx
33+ useLogger (name : string , props : object )
34+ ```
35+
36+ > ### Params
37+ >
38+ > - __ name__ : _ string_
39+ component name.
40+ > - __ props__ : _ object_
41+ props object to track.
42+ >
43+
44+ > ### Returns
45+ >
46+ >
47+ >
48+ >
Original file line number Diff line number Diff line change 3232 - [x] useIsMounted
3333 - [ ] useInsertionEffect (polyfill???)
3434 - [ ] useDeferredValue (polyfill - an idea can be use setTimeout inside useEffect or this https://lilibraries.github.io/hooks/useDelayedValue/)
35- - [ ] useLogger
35+ - [x ] useLogger
3636
3737- __ PERFORMANCE__
3838 - [x] useCallbackCompare
Original file line number Diff line number Diff line change @@ -71,3 +71,4 @@ export { useScreen } from './useScreen';
7171export { useMergedRef } from './useMergedRef' ;
7272export { useHotKeys } from './useHotKeys' ;
7373export { usePinchZoom } from './usePinchZoom' ;
74+ export { useLogger } from './useLogger' ;
Original file line number Diff line number Diff line change 1+ import { useEffect , useRef } from "react"
2+
3+ /**
4+ * **`useLogger`**: Hook to log componet details during Lifecycle events.
5+ * @param {string } name - component name.
6+ * @param {object } props - props object to track.
7+ */
8+ export const useLogger = ( name : string , props : object ) => {
9+ const prevProps = useRef < object > ( ) ;
10+
11+ useEffect ( ( ) => {
12+ if ( ! prevProps . current ) {
13+ prevProps . current = props ;
14+ } else {
15+ const keys = Reflect . ownKeys ( props ) ;
16+ for ( const key of keys ) {
17+ if ( Reflect . get ( props , key ) !== Reflect . get ( prevProps . current , key ) ) {
18+ console . log ( name + " component updated" , prevProps , props ) ;
19+ }
20+ }
21+ }
22+ } , [ name , props ] ) ;
23+
24+ useEffect ( ( ) => {
25+ console . log ( name + " component mounted" ) ;
26+
27+ return ( ) => {
28+ console . log ( name + " component unmounted" ) ;
29+ }
30+ // eslint-disable-next-line react-hooks/exhaustive-deps
31+ } , [ ] ) ;
32+ }
Original file line number Diff line number Diff line change @@ -89,7 +89,8 @@ export {
8989 useScreen ,
9090 useMergedRef ,
9191 useHotKeys ,
92- usePinchZoom
92+ usePinchZoom ,
93+ useLogger
9394} from './hooks'
9495
9596export {
You can’t perform that action at this time.
0 commit comments