html, 
body{
  height: 100%;
}

body{
  font: 20px sans-serif;
  background: #333;
  color: #eee;
  display: flex;
  justify-content: center;
  align-items: center;    
}

.redux{
  background: yellowgreen;
  text-align: center;
  padding: .1em;

  button {
    margin: .2em;
    padding: 1em;    
    font-size: 120%;
    min-width: 3em;
    cursor: pointer;
  }  
}
View Compiled
// Reducer
const counter = (state = 0, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;
  }
}
// Reducer

const { createStore } = Redux;
const store = createStore(counter);

// Child Component
var Counter = ({
  value,
  onIncrement,
  onDecrement
}) => (
  <div className='redux'>
    <h1>{value}</h1>
    <button onClick={onIncrement}>+</button>
    <button onClick={onDecrement}>-</button>
  </div>  
);
// Child Component

// View
const render = () => {
  ReactDOM.render(
    <Counter 
       value={store.getState()} 
       onIncrement={()=> store.dispatch({type: 'INCREMENT'})}
       onDecrement={()=> store.dispatch({type: 'DECREMENT'})}
    />,
    document.querySelector('body')
  );
};
// View

store.subscribe(render);
render();
View Compiled
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. //cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react.min.js
  2. //cdnjs.cloudflare.com/ajax/libs/react/0.14.3/react-dom.min.js
  3. //cdnjs.cloudflare.com/ajax/libs/redux/3.0.4/redux.min.js