Skip to content

Instantly share code, notes, and snippets.

View jasonleehodges's full-sized avatar

jasonleehodges

View GitHub Profile
@jasonleehodges
jasonleehodges / data-service-hook.ts
Created March 21, 2020 22:35
Example of dispatching actions without Thunks using custom hooks
import { useDispatch } from 'react-redux';
import { setData } from '../actions';
export const useDataService = () => {
const dispatch = useDispatch();
const getData = () => {
fetch(url)
.then(resp => resp.json())
.then(data => dispatch(setData(data));
};
@jasonleehodges
jasonleehodges / example-component.ts
Created March 21, 2020 22:38
Using Data Service Custom Hook
import React, { FC } from 'react';
import { useDataSErvice } from '../hooks';
import { useSelector } from 'react-redux';
import { selectData } from '../selectors';
export const ExampleComponent: FC = (props) => {
const { getData } = useDataService();
const data = useSelector(selectData);
useEffect(() => {
@jasonleehodges
jasonleehodges / accumulator-figure1.ts
Last active September 14, 2020 17:30
Figure 1 - Basic Accumulator Pattern
const numbers: number[] = [3, 5, 7, 9, 12];
let accumulator: number = 0;
for (let i = 0; i < numbers.length; i++) {
accumulator += numbers[i];
}
// 36
const numbers: number[] = [3, 5, 7, 9, 12];
let accumulator: number = 0;
numbers.forEach((number: number) => {
accumulator += number;
});
const numbers: number[] = [3, 5, 7, 9, 12];
const accumulated = numbers.reduce(
(accumulator: number, number: number) => accumulator + number,
0);
// 36
const days = [
"Sunday",
const days = ["Sunday", "Monday", "Tuesday", "Wendesday", "Thursday", "Friday", "Saturday"];
let week = {};
for (let i = 0; i < days.length; i++) {
week[days[i]] = i;
}
// {
// Sunday: 0,
// Monday: 1,
@jasonleehodges
jasonleehodges / debounce.ts
Last active December 23, 2020 17:33
React based debounce hook
import { MutableRefObject, useMemo, useRef } from 'react';
export const useDebounce = (milliseconds: number) => {
const clearable: MutableRefObject<number | undefined> = useRef();
const debounce = useMemo(
() => (fn: () => Promise<void>) => {
if (clearable.current !== undefined) {
clearTimeout(clearable.current);
}
import React from 'react';
export const Badge = (props) => {
return (
<div style={
{backgroundColor: props.status === 'active' ? 'green' : 'red'}
}>
Status: {props.status}
</div>
);
export const status = {
active: 'Ready',
inactive: 'Inactive'
}
import React from 'react';
import { status, labels } from './status';
export const Badge = (props) => {
return (
<div style={
{backgroundColor: props.status === status.active ? 'green' : 'red'}
}>
{labels.statusPrompt[props.language]}: {props.status}
</div>