export const useTransition = `import Button from './Button'; import { useState, useTransition } from 'react'; const UseTransition = () => { const [value, setValue] = useState(0); const [value2, setValue2] = useState(-1); const [length, setLength] = useState(30000); const [pending, setTransiton] = useTransition(); const handleClick = () => { setValue((v) => v + 1); setTransiton(() => setLength((l) => l + 1)); // setLength((l) => l + 1); }; return ( <>
{Array.from({ length }).map((_, i) => (
{length - i}
))}
); }; export default UseTransition;`; export const useDeferredValue = `import Button from './Button'; import { useDeferredValue, useState } from 'react'; const UseDeferredValue = () => { const [value, setValue] = useState(0); const deferred = useDeferredValue(value); return ( <>
Deferred:
Primtive:
{Array.from({ length: 30000 }).map((_, i) => (
{i}
))}
); }; export default UseDeferredValue;`; export const useId = `import Input from './Input'; import { useId } from 'react'; const RUAForm = () => { const id = useId(); return ( <>
); }; const UseId = () => { return ( <> ); }; export default UseId;`; export const store = `export type State = { count: number; info: string; }; export type Store = { state: State; setState: ( stateOrFn: State | ((state: State) => State) ) => void; subscribe: (listener: () => void) => () => void; listeners: Set<() => void>; getSnapshot: () => State; }; const store: Store = { state: { count: 0, info: 'Hello', }, setState(stateOrFn) { const newState = typeof stateOrFn === 'function' ? stateOrFn(store.state) : stateOrFn; store.state = { ...store.state, ...newState, }; store.listeners.forEach((listener) => listener()); }, listeners: new Set(), subscribe(listener) { store.listeners.add(listener); return () => { store.listeners.delete(listener); }; }, getSnapshot() { return store.state; }, }; export default store;`; export const useSyncExternalStore = `import Button from './Button'; import Input from './Input'; import { useSyncExternalStore } from 'react'; import store from './store'; const Couter = () => { const { count, info } = useSyncExternalStore( store.subscribe, store.getSnapshot ); return ( <>
Count: {count}
Info: {info}
); }; const Infor = () => { const { count, info } = useSyncExternalStore( store.subscribe, store.getSnapshot ); return ( <>
Count: {count}
Info: {info}
store.setState((d) => ({ ...d, info: e.target.value }))} value={info} />
); }; const UseSyncExternalStore = () => { return ( <>
); }; export default UseSyncExternalStore;`; export const useInsertionEffect = `import { useEffect, useLayoutEffect, useInsertionEffect } from 'react'; const Child = () => { useEffect(() => { console.log('useEffect child is called'); }); useLayoutEffect(() => { console.log('useLayoutEffect child is called'); }); useInsertionEffect(() => { console.log('useInsertionEffect child is called'); }); return <>; }; const UseInsertionEffect = () => { useEffect(() => { console.log('useEffect app is called'); }); useLayoutEffect(() => { console.log('useLayoutEffect app is called'); }); useInsertionEffect(() => { console.log('useInsertionEffect app is called'); }); return ( <>
Check console in DevTools
); }; export default UseInsertionEffect;`;