Skip to content

Instantly share code, notes, and snippets.

@cazetto
Created April 3, 2017 20:36
Show Gist options
  • Save cazetto/30a9b62dd467524ef435df35efc05c41 to your computer and use it in GitHub Desktop.
Save cazetto/30a9b62dd467524ef435df35efc05c41 to your computer and use it in GitHub Desktop.
// HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Redux</title>
</head>
<body>
<div class="counter">
<h1 class="value">`Counter: ${data.counter}${data.other}`</h1>
<button class="btn decrease">
Decrease
</button>
<button class="btn increase">
Increase
</button>
</div>
<script src="bundle.js"></script>
</body>
</html>
// JS
import { createStore } from 'redux'
function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
let store = createStore(counter)
let replaceCounter = htmlStr => data => eval(htmlStr)
const counterElement = document.querySelector('.counter > .value')
const { innerHTML: counterInnerHtml } = counterElement
let counterHtmlPristineCopy = { element: counterElement, pristineHtml: counterInnerHtml.substr(0, counterInnerHtml.length) }
const changeCount = ({target}) => {
target.classList.contains('increase') ? store.dispatch({ type: 'INCREMENT' }) : store.dispatch({ type: 'DECREMENT' })
}
[ document.querySelector('.counter > .increase'),
document.querySelector('.counter > .decrease')
].forEach(el => el.addEventListener('click', changeCount))
let getUpdatedDOM = pristineCopy => replaceCounter(pristineCopy.pristineHtml)({counter: store.getState(), other:' :D'});
let updateDOM = () => {
counterHtmlPristineCopy.element.innerHTML = getUpdatedDOM(counterHtmlPristineCopy)
}
store.subscribe(updateDOM)
updateDOM()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment