Skip to content

Instantly share code, notes, and snippets.

function postComments(state = [], action) {
switch(action.type) {
case 'LOAD_COMMENTS' :
return action.comments;
case 'ADD_COMMENT':
return [...state, {
user : { username: action.author },
text : action.comment
}];
case 'REMOVE_COMMENT':
@gaearon
gaearon / slim-redux.js
Last active December 3, 2024 06:34
Redux without the sanity checks in a single file. Don't use this, use normal Redux. :-)
function mapValues(obj, fn) {
return Object.keys(obj).reduce((result, key) => {
result[key] = fn(obj[key], key);
return result;
}, {});
}
function pick(obj, fn) {
return Object.keys(obj).reduce((result, key) => {
if (fn(obj[key])) {
@gaearon
gaearon / ReduxUndoExample.js
Created July 30, 2015 14:46
Redux undo reducer factory example by @iclanzan
// Written by @iclanzan
// All credit goes to him!
// You create the reducer like this:
// var reducer = createTimelineReducer('someName', someReducer, ['foo', 'bar']);
// And then whenever an action of type `foo` or `bar` happens it calls `someReducer` and adds the result to the timeline.
// Then to undo/redo you trigger an action of type `someNameUndo`/`someNameRedo`.
var defaults = require('lodash/object/defaults');
var capitalize = require('lodash/string/capitalize');
@gaearon
gaearon / ReduxMicroBoilerplate.js
Last active March 26, 2020 00:35
Super minimal React + Redux app
import React, { Component } from 'react';
import { createStore, combineReducers, applyMiddleware, bindActionCreators } from 'redux';
import { provide, connect } from 'react-redux';
import thunk from 'redux-thunk';
const AVAILABLE_SUBREDDITS = ['apple', 'pics'];
// ------------
// reducers
// ------------
@gaearon
gaearon / actionsactionsactionsactions.js
Created June 16, 2015 12:06
Basic action monitoring for Redux
// App.js
import { Provider, Connector } from 'redux/react';
import monitor from './monitor/index';
const store = composeStores(stores);
const { dispatcher, ActionLog } = monitor(createDispatcher(store));
const redux = createRedux(dispatcher);
export default class App {
@gaearon
gaearon / combining.js
Created June 3, 2015 18:03
Combining Stateless Stores
// ------------
// counterStore.js
// ------------
import {
INCREMENT_COUNTER,
DECREMENT_COUNTER
} from '../constants/ActionTypes';
const initialState = { counter: 0 };
@gaearon
gaearon / reduce-store-time-travel.js
Last active January 30, 2024 05:08
Time travelling concept with reducey stores and state atoms inspired by https://gist.github.com/threepointone/43f16389fd96561a8b0b#comment-1447275
/**
* Stores are just seed + reduce function.
* Notice they are plain objects and don't own the state.
*/
const countUpStore = {
seed: {
counter: 0
},
reduce(state, action) {
@gaearon
gaearon / Stateful.js
Created April 23, 2015 16:57
Stateful.js
import React, { Component } from 'react';
// Usage:
//
// @Stateful({
// initialize(props) {
// return {
// count: 0
// };
// },
@gaearon
gaearon / react-dnd-1.0-alpha-example.js
Last active August 29, 2015 14:19
React DnD 1.0 alpha example
import React from 'react';
import { configureDragDrop, configureDragDropContext } from 'react-dnd';
import HTML5Backend from 'react-dnd/modules/backends/HTML5';
// Note: @configureDragDropContext is called a “decorator”.
// This desugars roughly as class App { ... } App = configureDragDropContext(HTML5Backend)(App);
// You can enable decorators by putting { "stage": 1 } in your .babelrc.
@configureDragDropContext(HTML5Backend)
export default class App extends React.Component {
export default {
getInitialState() {
const data = {};
this.subscribe(this.props, this.context, (key, value) => {
data[key] = value;
});
this.unsubscribe();
return { data };