Add react-redux to the party
This commit is contained in:
parent
f69e0a248c
commit
535727fdab
@ -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",
|
||||||
|
7
src/public/js/actions/actionCreators.js
Normal file
7
src/public/js/actions/actionCreators.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// Select Movie
|
||||||
|
export function selectMovie(index) {
|
||||||
|
return {
|
||||||
|
type: "SELECT_MOVIE",
|
||||||
|
index
|
||||||
|
}
|
||||||
|
}
|
@ -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'));
|
||||||
|
11
src/public/js/reducers/index.js
Normal file
11
src/public/js/reducers/index.js
Normal 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;
|
3
src/public/js/reducers/movie-store.js
Normal file
3
src/public/js/reducers/movie-store.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export default function movieStore(state = {}, action) {
|
||||||
|
return state;
|
||||||
|
}
|
23
src/public/js/store.js
Normal file
23
src/public/js/store.js
Normal 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;
|
38
yarn.lock
38
yarn.lock
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user