Skip to content

Instantly share code, notes, and snippets.

View hyber1z0r's full-sized avatar

Jakob Gaard Andersen hyber1z0r

View GitHub Profile
@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);
@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 / 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 / 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 / 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 / NewsletterBanner.tsx
Created August 4, 2020 10:03
useTimeout example
import React, { useState } from 'react';
import useTimeout from './useTimeout';
const NewsletterBanner = () => {
// Wait 5 seconds before poppung up banner
const wait = 5000;
const [visible, setVisible] = useState(false);
useTimeout(() => {
setVisible(true);
@hyber1z0r
hyber1z0r / useInterval.ts
Last active August 10, 2020 19:41
useInterval hook
import React, { useEffect, useRef } from 'react';
const useInterval = (callback: () => void, delay: number | null) => {
const savedCallback = useRef(callback);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
@hyber1z0r
hyber1z0r / ShoppingList.tsx
Created August 4, 2020 10:08
useInterval example
import React, { useState, useCallback } from 'react';
import useInterval from './useInterval';
const ShoppingList = () => {
// Wait 5 seconds before fetching new data
const POLL_DELAY = 5000;
const [items, setItems] = useState([]);
const fetchItems = useCallback(async () => {
const response = await fetch('/shopping-list/items');
type Todo = {
id: number;
title: string;
completed: boolean;
}
const todos: Todo[] = [
{ id: 1, title: 'Buy nachos', completed: false },
{ id: 2, title: 'Buy avocado', completed: true },
{ id: 3, title: 'Buy ground beef', completed: false },
type Todo = {
id: number;
title: string;
completed: boolean;
}
const todos: Todo[] = [
{ id: 1, title: 'Buy nachos', completed: false },
{ id: 2, title: 'Buy avocado', completed: true },
{ id: 3, title: 'Buy ground beef', completed: false },