diff --git a/package.json b/package.json
index 78e3a71..082ed00 100644
--- a/package.json
+++ b/package.json
@@ -7,13 +7,16 @@
},
"dependencies": {
"fela": "^4.3.5",
+ "mobx-react": "^4.1.8",
"prop-types": "^15.5.8",
"react": "^15.5.4",
"react-dom": "^15.5.4",
"react-fela": "^4.3.5",
"react-jss": "^6.1.1",
+ "react-redux": "^5.0.4",
"react-router": "^4.1.1",
"react-router-dom": "^4.1.1",
+ "redux": "^3.6.0",
"styled-components": "^1.4.6"
},
"scripts": {
diff --git a/src/components/Router/index.js b/src/components/Router/index.js
index f34e355..f6c9d63 100644
--- a/src/components/Router/index.js
+++ b/src/components/Router/index.js
@@ -9,6 +9,7 @@ import State from '../../pages/State'
import Lifecycle from '../../pages/Lifecycle'
import HigherOrder from '../../pages/HigherOrder'
import ManipulatingData from '../../pages/ManipulatingData'
+import StateManagement from '../../pages/StateManagement'
import About from '../../pages/About'
import Children from '../../pages/Children'
import Events from '../../pages/Events'
@@ -58,6 +59,9 @@ class Navigation extends React.Component {
About us
+
+ State management
+
@@ -71,6 +75,7 @@ class Navigation extends React.Component {
+
diff --git a/src/pages/StateManagement/CounterMobX/index.js b/src/pages/StateManagement/CounterMobX/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/pages/StateManagement/CounterPlain/index.js b/src/pages/StateManagement/CounterPlain/index.js
new file mode 100644
index 0000000..0cd1990
--- /dev/null
+++ b/src/pages/StateManagement/CounterPlain/index.js
@@ -0,0 +1,20 @@
+import React from 'react'
+
+const increment = (state) => ({ count: state.count + 1 })
+const decrement = (state) => ({ count: state.count - 1 })
+
+class CounterPlain extends React.Component {
+ state = { count: 0 }
+
+ render () {
+ return (
+
+
{this.state.count}
+
+
+
+ )
+ }
+}
+
+module.exports = CounterPlain
diff --git a/src/pages/StateManagement/CounterRedux/Counter.js b/src/pages/StateManagement/CounterRedux/Counter.js
new file mode 100644
index 0000000..261813c
--- /dev/null
+++ b/src/pages/StateManagement/CounterRedux/Counter.js
@@ -0,0 +1,22 @@
+import React from 'react'
+import { connect } from 'react-redux'
+import { incrementCounter, decrementCounter } from './actions'
+
+const Counter = (props) => (
+
+
{props.count}
+
+
+
+)
+
+const mapStateToProps = (state) => ({
+ count: state.count
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ incrementCounter: () => dispatch(incrementCounter()),
+ decrementCounter: () => dispatch(decrementCounter())
+})
+
+export default connect(mapStateToProps, mapDispatchToProps)(Counter)
diff --git a/src/pages/StateManagement/CounterRedux/actions.js b/src/pages/StateManagement/CounterRedux/actions.js
new file mode 100644
index 0000000..392076e
--- /dev/null
+++ b/src/pages/StateManagement/CounterRedux/actions.js
@@ -0,0 +1,9 @@
+export const incrementCounter = (amount = 1) => ({
+ type: 'INCREMENT',
+ value: amount
+})
+
+export const decrementCounter = (amount = 1) => ({
+ type: 'DECREMENT',
+ value: amount
+})
diff --git a/src/pages/StateManagement/CounterRedux/index.js b/src/pages/StateManagement/CounterRedux/index.js
new file mode 100644
index 0000000..2359289
--- /dev/null
+++ b/src/pages/StateManagement/CounterRedux/index.js
@@ -0,0 +1,15 @@
+import React from 'react'
+import { Provider } from 'react-redux'
+import { createStore } from 'redux'
+import counterReducer from './reducer'
+import Counter from './Counter'
+
+const store = createStore(counterReducer)
+
+const CounterRedux = () => (
+
+
+
+)
+
+export default CounterRedux
diff --git a/src/pages/StateManagement/CounterRedux/reducer.js b/src/pages/StateManagement/CounterRedux/reducer.js
new file mode 100644
index 0000000..95a30ce
--- /dev/null
+++ b/src/pages/StateManagement/CounterRedux/reducer.js
@@ -0,0 +1,12 @@
+const counterReducer = (state = { count: 0 }, action) => {
+ switch (action.type) {
+ case 'INCREMENT':
+ return { count: state.count + 1 }
+ case 'DECREMENT':
+ return { count: state.count - 1 }
+ default:
+ return state
+ }
+}
+
+export default counterReducer
diff --git a/src/pages/StateManagement/index.js b/src/pages/StateManagement/index.js
new file mode 100644
index 0000000..d2aa5eb
--- /dev/null
+++ b/src/pages/StateManagement/index.js
@@ -0,0 +1,54 @@
+import React from 'react'
+import Code from '../../components/Code'
+import PageTitle from '../../components/PageTitle'
+import Example from '../../components/Example'
+import CounterPlain from './CounterPlain'
+import CounterRedux from './CounterRedux'
+
+const Page = (props) => (
+
+
+
+
+ blah, blah, blah, choose something
+
+
+
{`/* CounterPlain/index.js */
+import React from 'react'
+
+const increment = (state) => ({ count: state.count + 1 })
+const decrement = (state) => ({ count: state.count - 1 })
+
+class CounterPlain extends React.Component {
+ state = { count: 0 }
+
+ render () {
+ return (
+
+
{this.state.count}
+
+
+
+ )
+ }
+}
+
+module.exports = CounterPlain`}
+
+
+
+
+
+
+
+
Redux
+
+
+
+
+
+
MobX
+
+)
+
+export default Page