Counter react / redux example
According to egghead video tutorial.
by davidpmcintyre
HTML
<script src="https://npmcdn.com/expect/umd/expect.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.3.1/redux.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.js"></script>
<script src="https://babeljs.io/scripts/babel.js"></script>
<div id="root">
</div>
<script id="jsx-babelify" type="text/babel-jsx">
var mockData = [
{ id: 1, name: 'joe' },
{ id: 2, name: 'sam' },
{ id: 3, name: 'abe' },
];
var initialState = { list: []};
const reducer = (state = initialState, action) => {
switch(action.type) {
case 'RECEIVE_DATA':
return Object.assign({}, {list: mockData.slice() });
case 'SORT': //this mutates existing state
var list = state.list;
var sorted = list.sort(function(a, b){
if (a.name > b.name){
return 1;
} else if (a.name < b.name){
return -1;
} else {
return 0;
}
})
if (list[0].name === 'abe'){
console.log('original state has been mutated');
}
return Object.assign({}, state, { list: sorted })
default:
return state;
}
}
const MyComponent = ({
list,
onSort,
onFetch,
onTest}) => (
<div>
<button onClick={onFetch}>Fetch</button>
<button onClick={onSort}>Sort</button>
<button onClick={onTest}>Test</button>
<ul>
{list.map(item =>
<li key={item.id}>{item.name}</li>
)}
</ul>
</div>
);
const {createStore} = Redux;
const store = createStore(reducer); // bind reducer
const render = () => {
ReactDOM.render(
<MyComponent list={store.getState().list}
onFetch={() => store.dispatch({type: 'RECEIVE_DATA'})}
onSort={() => store.dispatch({type: 'SORT'})}
onTest={() => {
var testState = { list: mockData.slice() };
expect(
reducer(testState, {type: 'RECEIVE_DATA'...