这一章终于大集成了react
react
源码git
import React from 'react' import ReactDom from 'react-dom' class App extends React.Component { render() { return (<div>react</div>) } } ReactDom.render( <App/>, document.getElementById('app') )
说明:github
react
主要是用到react
、react-router
库react-router
源码redux
import React from 'react' import ReactDom from 'react-dom' import {BrowserRouter, Route, withRouter} from 'react-router-dom' class Article extends React.Component { render() { return ( <p>article</p> ) } } let MyArticle = withRouter(Article) class App extends React.Component { render() { return (<div> <Route component={MyArticle}></Route> </div>) } } let MyApp = withRouter(App) ReactDom.render( <BrowserRouter> <MyApp/> </BrowserRouter>, document.getElementById('app') )
说明react-router
react-router-dom
库,是针对react-router
库在dom
环境下的封装withRouter
组件,注入match
、location
、history
等属性BrowserRouter
接管跟组件Route
指定路由和组件的对应关系redux
源码app
引入redux
相关的包dom
import {Provider, connect} from 'react-redux' import {createStore} from 'redux'
reducer
ide
const counter = (state = {counter: 0, num: 0}, action) => { switch (action.type) { case ACTION_INCREMENT: return {...state, ...{counter: ++state.counter}} case ACTION_DECREMENT: return {...state, ...{counter: --state.counter}} default: return state } }
action
和actionCreators
this
// action const ACTION_INCREMENT = 'INCREMENT' const ACTION_DECREMENT = 'DECREMENT' // action creator const increment = () => ({ type: ACTION_INCREMENT }) const decrement = () => ({ type: ACTION_DECREMENT })
连接组件spa
// store const store = createStore(counter) class Article extends React.Component { render() { return ( <p>{this.props.counter}</p> ) } } let MyArticle = withRouter(connect((state) => { return { counter: state.counter } })(Article)) class App extends React.Component { render() { return ( <div> <Route component={MyArticle}></Route> <button onClick={() => this.props.increment()}>+</button> <button onClick={() => this.props.decrement()}>-</button> </div> ) } } let MyApp = withRouter(connect(() => ({}), (dispatch) => { return { increment: () => dispatch(increment()), decrement: () => dispatch(decrement()) } })(App)) ReactDom.render( <Provider store={store}> <BrowserRouter> <MyApp/> </BrowserRouter> </Provider>, document.getElementById('app') )
说明
redux
、react-redux
库reducer
、action
、actionCreators
都是redux
用的Provider
接管BrowserRouter
,并注入store
connect
链接组件和store
,为组件注入reducer
每一步都搞懂,下一步才能更明确。