Skip to content

Instantly share code, notes, and snippets.

View shanebdavis's full-sized avatar

Shane Brinkman-Davis Delamore shanebdavis

View GitHub Profile
@shanebdavis
shanebdavis / list-with-h4r.js
Created December 28, 2019 23:43
modular-redux-tutorial with hooks-for-redux
import { useRedux } from "hooks-for-redux";
const getUniqueId = list =>
list.length > 0 ? Math.max(...list.map(t => t.id)) + 1 : 1;
export const [useList, { addItem, deleteItem }] = useRedux(
"list",
[
{ id: 1, text: "clean the house" },
{ id: 2, text: "buy milk" }
@shanebdavis
shanebdavis / store.js
Created December 28, 2019 22:00
modular-redux-tutorial store.js
const { createStore, combineReducers } = require("redux");
let reducers = {};
export const store = createStore(s => s);
store.injectReducer = (key, reducer) => {
reducers[key] = reducer;
store.replaceReducer(combineReducers(reducers));
};
@shanebdavis
shanebdavis / list-part4-inject-reducer.js
Last active December 28, 2019 21:53
modular-redux-tutorial list poart 4 inject reducer
// INJECT-REDUCERS INTO REDUX STORE
store.injectReducer(storeKey, (state = initialState, { type, payload }) =>
reducers[type] ? reducers[type](state, payload) : state
);
@shanebdavis
shanebdavis / list-part3-exports.js
Created December 28, 2019 21:44
modular-redux-tutorial list part 3 - exports
// EXPORTS
export const useList = () => {
const [state, setState] = useState(getState());
useLayoutEffect(() => subscribe(setState), [setState]);
return state;
};
export const addItem = item =>
store.dispatch({ type: "addItem", payload: item });
export const deleteItem = item =>
@shanebdavis
shanebdavis / list-part2-helpers.js
Last active December 28, 2019 21:42
modular-redux-tutorial list part 2 - helpers
// HELPERS
const getState = () => store.getState()[storeKey];
const subscribe = f => {
let lastState = getState();
return store.subscribe(
() => lastState !== getState() && f((lastState = getState()))
);
};
@shanebdavis
shanebdavis / list-part1-definitions.js
Last active December 28, 2019 21:33
modular-redux-tutorial redux/index.js part 1 definitions
import { useState, useLayoutEffect } from "react";
import { store } from "./store";
const storeKey = "list";
// DEFINITIONS
const getUniqueId = list =>
list.length > 0 ? Math.max(...list.map(t => t.id)) + 1 : 1;
const initialState = [
{ id: 1, text: "clean the house" },
@shanebdavis
shanebdavis / index.js
Created December 28, 2019 21:15
modular-redux-tutorial root index.js
import React from "react";
import { render } from "react-dom";
import { ToDo } from "./components/ToDo";
render(<ToDo />, document.getElementById("root"));
@shanebdavis
shanebdavis / list-stub.js
Last active January 2, 2020 22:12
modular-redux-tutorial list-state-stub
export const useList = () => [
{ id: 1, text: "clean the house" },
{ id: 2, text: "buy milk" }
];
export const addItem = item => null
export const deleteITem = item => null
@shanebdavis
shanebdavis / ToDo.js
Created December 28, 2019 21:07
modular-redux-tutorial component ToDo
import React, { useState } from "react";
import { ToDoItem } from "./ToDoItem";
import { addItem, useList } from "../redux/list";
export const ToDo = () => {
const list = useList();
const [text, setText] = useState("");
const createNewToDoItem = () => {
if (!text) return alert("Please enter text!");
@shanebdavis
shanebdavis / ToDoItem.js
Created December 28, 2019 21:06
modular-redux-tutorial component ToDoItem
import React from "react";
import { deleteItem } from "../redux/list";
export const ToDoItem = ({ item }) => (
<li>
{item.text + " "}
<button onClick={() => deleteItem(item)}>-</button>
</li>
);