Skip to content

Instantly share code, notes, and snippets.

View hyber1z0r's full-sized avatar

Jakob Gaard Andersen hyber1z0r

View GitHub Profile
@hyber1z0r
hyber1z0r / useTimeout.ts
Last active August 10, 2020 19:39
useTimeout hook
import React, { useEffect, useRef } from 'react';
const useTimeout = (callback: () => void, delay: number | null) => {
const savedCallback = useRef(callback);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
@hyber1z0r
hyber1z0r / TodoList.tsx
Created August 4, 2020 09:58
useWhenVisible example
import React, { useEffect, useState, useRef } from 'react';
import useWhenVisible from './useWhenVisible';
const TodoList = () => {
const limit = 25;
const [offset, setOffset] = useState(0);
const [todos, setTodos] = useState([]);
const lastEl = useRef();
useEffect(() => {
@hyber1z0r
hyber1z0r / useWhenVisible.ts
Created August 4, 2020 09:47
useWhenVisible hook
import React, { useEffect } from 'react';
const useWhenVisible = (target: Element | undefined,
callback: () => void,
root: Element | undefined = document.body) => {
useEffect(() => {
if (!target || !root) {
return;
}
@hyber1z0r
hyber1z0r / useDebounce.ts
Last active September 9, 2020 21:32
useDebounce implementation
import { useState, useEffect } from 'react';
const useDebounce = <T>(value: T, delay: number): T => {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
@hyber1z0r
hyber1z0r / Search.tsx
Last active August 4, 2020 09:39
useDebounce example
import React, { useState, useEffect } from 'react';
import useDebounce from './useDebounce';
const Search = () => {
const [searchTerm, setSearchTerm] = useState('');
const [results, setResults] = useState([]);
// ✅ Use debounce hook to debounced searchTerm as it is rapidly changing
const debouncedSearchTerm = useDebounce(searchTerm, 500);