export const useDebounce = <T>(value: T, delay?: number) => {
const [debounceValue, setDebounceValue] = useState(value);
useEffect(()=>{
const debounceTimer = setTimeout(() => setDebounceValue(value), delay);
return () => clearTimeout(debounceTimer);
},[]);
return debounceValue;
}
export const useArray = <T>(initArray: T[]) => {
const [array, setArray] = useState(initArray);
return {
array,
setArray,
add: (item: T) => setValue([...array, item]),
removeIndex: (index: number) => {
const copyArray = [...array];
copyArray.splice(index, 1);
setArray(copyArray);
},
clear: () => setArray([])
}
}
interface Users {
id: string;
token: string;
}
const AuthContext = React.createContext<{users: Users} | undefined>(undefined);
AuthContext.displayName = 'AuthContext';
export const AuthProvider = ({children}: {children: ReactNode}) => {
const users = {id: '', token: ''}
return <AuthContext.Provider children={children} value={{users}} />
}
export const useAuth = () => {
const context = useContext(AuthContext);
if(!context){
throw new Error('useAuth 必须在 AuthProvider中使用')
}else{
return context;
}
}
export const AppProvider = ({children}: {children: ReactNode}) => {
return <AuthProvider>
{ children }
</AuthProvider>
}
<AppProvider>
<App />
</AppProvider>