我們先把react component做個區別, Component有分 Component 跟 Container. Container 就是會跟redux有互動的, Container 處理狀態跟資料然後把相關的資料分給下面的Component。 那Component就是單存的把container傳給它的資料顯現出來,還有處理靜態的東西(比如html, css)。 有時候container又稱為smart component(聰明的組件) 然後 component 為笨的組件(笨的組件)。
我會用我的recipe 專案來做教學。 Recipebox Github
npm install --save react-redux
//index.js
import { createStore } from 'redux';
import reducer from './reducers';
import { Provider } from 'react-redux';
...
const store = createStore(reducer);
...
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
mapStateToProps 是串redux的state 。
mapDispatchToProps 是串redux的action。
// App.js
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as RecipeActions from '../actions/index';
...
const mapDispatchToProps = dispatch => ({
actions: bindActionCreators(RecipeActions, dispatch)
})
const mapStateToProps = (state) => {
return {
recipes: state.recipes
}
};
...
connect connect(mapStateToProps, mapDispatchToProps)(App); //記得加這行
// App.js
// console.log(this.props)
const {actions, recipes} = this.props;
5.現在我們把state跟action 當成props 傳給我們的components(dumb components). 在以下的例子,我們把我們的質傳給Recipelist 跟AddForm component. 接下來我就可以在我的 component呼喚那些 action 跟 state。
//App.js
<Grid>
<Header />
<Recipelist
recipes={recipes}
deleterecipe={actions.deleteRecipe}
editrecipe={actions.editRecipe}
/>
<AddForm
addrecipe={actions.addRecipe}
/>
</Grid>
以上就是如何把redux跟react串在一起。 當我們的App慢慢長大,我們需要一個中央狀態管理器。 那你以為這樣就結束了嗎? 當然不是, 我明天教大家如何用redux dev tool. Redux dev tool 是一個chrome的工具 我們可以追蹤我們的action.