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