Add react-redux to the party

This commit is contained in:
Grégoire Delattre 2016-11-14 14:46:39 +01:00
parent f69e0a248c
commit 535727fdab
9 changed files with 119 additions and 13 deletions

View File

@ -16,7 +16,10 @@
"jquery": "^2.2.4", "jquery": "^2.2.4",
"react": "^15.3.2", "react": "^15.3.2",
"react-dom": "^15.3.2", "react-dom": "^15.3.2",
"react-router": "^3.0.0" "react-redux": "^4.4.6",
"react-router": "^3.0.0",
"react-router-redux": "^4.0.7",
"redux": "^3.6.0"
}, },
"devDependencies": { "devDependencies": {
"axios": "^0.15.2", "axios": "^0.15.2",

View File

@ -0,0 +1,7 @@
// Select Movie
export function selectMovie(index) {
return {
type: "SELECT_MOVIE",
index
}
}

View File

@ -1,10 +1,20 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom' import ReactDOM from 'react-dom'
import NavBar from './navbar.jsx'
import MovieList from './movie-list.jsx'
import { Router, Route, IndexRoute, Link, hashHistory } from 'react-router' import { Router, Route, IndexRoute, Link, hashHistory } from 'react-router'
import { Provider } from 'react-redux'
class App extends React.Component { import rootReducer from './reducers/index'
import store, { history } from './store'
import NavBar from './components/navbar.jsx'
import MovieList from './components/movie-list.jsx'
import UserLoginForm from './components/user-login.jsx'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import * as actionCreators from './actions/actionCreators'
class Main extends React.Component {
render() { render() {
return ( return (
<div> <div>
@ -13,7 +23,7 @@ class App extends React.Component {
</div> </div>
<div className="container-fluid"> <div className="container-fluid">
<div className="container"> <div className="container">
{this.props.children} {React.cloneElement(this.props.children, this.props)}
</div> </div>
</div> </div>
</div> </div>
@ -21,11 +31,26 @@ class App extends React.Component {
} }
} }
function mapStateToProps(state) {
return {
movieStore: state.movieStore,
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(actionCreators, dispatch);
}
const App = connect(mapStateToProps, mapDispatchToProps)(Main);
ReactDOM.render(( ReactDOM.render((
<Router history={hashHistory}> <Provider store={store}>
<Router history={history}>
<Route path="/" component={App}> <Route path="/" component={App}>
<Route path="/users/login" component={UserLoginForm} />
<IndexRoute component={MovieList} /> <IndexRoute component={MovieList} />
<Route path="/movies/popular" component={MovieList} /> <Route path="/movies/popular" component={MovieList} />
</Route> </Route>
</Router> </Router>
</Provider>
),document.getElementById('app')); ),document.getElementById('app'));

View File

@ -0,0 +1,11 @@
import { combineReducers } from 'redux';
import { routerReducer } from 'react-router-redux'
import movieStore from './movie-store'
const rootReducer = combineReducers({
routing: routerReducer,
movieStore
})
export default rootReducer;

View File

@ -0,0 +1,3 @@
export default function movieStore(state = {}, action) {
return state;
}

23
src/public/js/store.js Normal file
View File

@ -0,0 +1,23 @@
import { createStore, compose } from 'redux';
import { syncHistoryWithStore } from 'react-router-redux'
import { browserHistory } from 'react-router'
// Import the root reducer
import rootReducer from './reducers/index'
// Set the default state
const defaultState = {
movieStore: {
movies: [],
selectedMovie: {},
selectedMovieIndex: 0,
},
};
// Export the store
const store = createStore(rootReducer, defaultState);
// Sync history with store
export const history = syncHistoryWithStore(browserHistory, store);
export default store;

View File

@ -1577,7 +1577,7 @@ hoek@2.x.x:
version "2.16.3" version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
hoist-non-react-statics@^1.2.0: hoist-non-react-statics@^1.0.3, hoist-non-react-statics@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
@ -1672,7 +1672,7 @@ interpret@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
invariant@^2.2.0, invariant@^2.2.1: invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1:
version "2.2.1" version "2.2.1"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54"
dependencies: dependencies:
@ -1950,6 +1950,10 @@ loader-utils@^0.2.11:
json5 "^0.5.0" json5 "^0.5.0"
object-assign "^4.0.1" object-assign "^4.0.1"
lodash-es@^4.2.1:
version "4.17.0"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.0.tgz#b94e3ba146a914b6513e9c302cc59cc6be6c7e79"
lodash._basecopy@^3.0.0: lodash._basecopy@^3.0.0:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
@ -2089,6 +2093,10 @@ lodash@^4.2.0:
version "4.16.6" version "4.16.6"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777"
lodash@^4.2.1:
version "4.17.0"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.0.tgz#93f4466e5ab73e5a1f1216c34eea11535f0a8df5"
lodash@~1.0.1: lodash@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
@ -2557,6 +2565,15 @@ react-dom@^15.3.2:
version "15.3.2" version "15.3.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f"
react-redux:
version "4.4.6"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.6.tgz#4b9d32985307a11096a2dd61561980044fcc6209"
dependencies:
hoist-non-react-statics "^1.0.3"
invariant "^2.0.0"
lodash "^4.2.0"
loose-envify "^1.1.0"
react-router: react-router:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff" resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff"
@ -2567,6 +2584,10 @@ react-router:
loose-envify "^1.2.0" loose-envify "^1.2.0"
warning "^3.0.0" warning "^3.0.0"
react-router-redux:
version "4.0.7"
resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-4.0.7.tgz#9b1fde4e70106c50f47214e12bdd888cfb96e2a6"
react@^15.3.2: react@^15.3.2:
version "15.3.2" version "15.3.2"
resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e"
@ -2665,6 +2686,15 @@ redent@^1.0.0:
indent-string "^2.1.0" indent-string "^2.1.0"
strip-indent "^1.0.1" strip-indent "^1.0.1"
redux:
version "3.6.0"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d"
dependencies:
lodash "^4.2.1"
lodash-es "^4.2.1"
loose-envify "^1.1.0"
symbol-observable "^1.0.2"
regenerate@^1.2.1: regenerate@^1.2.1:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
@ -2933,6 +2963,10 @@ supports-color@^3.1.0:
dependencies: dependencies:
has-flag "^1.0.0" has-flag "^1.0.0"
symbol-observable@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
tapable@^0.1.8, tapable@~0.1.8: tapable@^0.1.8, tapable@~0.1.8:
version "0.1.10" version "0.1.10"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"