用最简单的方式,了解react全家桶之redux

前端之家收集整理的这篇文章主要介绍了用最简单的方式,了解react全家桶之redux前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文以create-react-app项目作为开端,从最基础代码成长为一个实际项目的过程。
注意:本文没有大部分理论,只有代码,会逐步延伸。

redux组成部分

createStore.js
reducer.js
action.js

1.我们来说说第一个,createStore.js

先看看代码

  1. import { createStore } from 'redux'
  2. import reducer from ‘./reducer
  3. export default () => {
  4. let store = createStore(reducer)
  5. return store
  6. }

是不是炒鸡简单?
从redux里获取创建的方法,然后创建store的目的是干什么?当然是修改reducer,我们把reducer当作一个参数传入。

2.接着,我们看看我们的reducer是干什么的,看代码

  1. function counter(state = {value : 0},action) {
  2. switch (action.type) {
  3. case 'INCREASE':
  4. return Object.assign({},state,{
  5. value: state.value + 1
  6. })
  7. case 'DECREASE':
  8. return Object.assign({},{
  9. value: state.value - 1
  10. })
  11. default:
  12. return state
  13. }
  14. }
  15.  
  16. export default counter

是不是也炒鸡简单,无非就是修改一个state的value参数!这个state是带默认值。

那我们要怎么触发修改呢?

没错,那就是发起action。

3.action.js到底干了些什么?

  1. import { bindActionCreators } from 'redux'
  2.  
  3. export const INCREASE = 'INCREASE'
  4. export const increase = () => ({ type: INCREASE})
  5.  
  6. export const DECREASE = 'DECREASE'
  7. export const decrease = () => ({ type: DECREASE})
  8.  
  9. export const containerActions = dispatch => bindActionCreators({
  10. increase,decrease
  11. },dispatch)

bindActionCreators: 是由redux提供的辅助函数
参数由{x,y}:action,dispatch:store实例提供

好了好了,到此,我们就把一个完整的redux流程写完了。
就这么简单,现在我们来看看把这坨代码扔到create-react-app初始化完的代码里,是不是能运行起来。

App.js

  1. import React,{ Component } from 'react';
  2. import logo from './logo.svg';
  3. import './App.css';
  4. import { connect } from 'react-redux'
  5. import { containerActions } from './action'
  6.  
  7. class App extends Component {
  8. render() {
  9. return (
  10. <div className="App">
  11. <div className="App-header">
  12. <img src={logo} className="App-logo" alt="logo" />
  13. <h2>Welcome to React</h2>
  14. </div>
  15. <p className="App-intro">
  16. To get started,edit <code>src/App.js</code> and save to reload.
  17. </p>
  18. <button onClick={ this.props.increase }>INCREASE</button><br/>
  19. <button onClick={ this.props.decrease }>DECREASE</button><br/>
  20. <p>VALUE: {this.props.value}</p>
  21. </div>
  22. );
  23. }
  24. }
  25.  
  26. const mapStateToProps = (state) => {
  27. return {
  28. value: state.value
  29. }
  30. }
  31. //connect是由react-redux提供的辅助函数,作用是将store state里的值,映射到this.props
  32. //containerActions是把action里的方法绑定到当前组件,也就是App的this.props
  33. export default connect(mapStateToProps,containerActions)(App);

index.js

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import './index.css';
  4. import App from './App';
  5. import registerServiceWorker from './registerServiceWorker';
  6. import { Provider } from 'react-redux'
  7. import createStore from './createStore'
  8.  
  9. let store = createStore()
  10. //通过Provider把store传递到react
  11. ReactDOM.render(
  12. <Provider store={store}>
  13. <App />
  14. </Provider>,document.getElementById('root'));
  15. registerServiceWorker();

完美运行。
github:https://github.com/NatPagle/m...欢迎同学们跟我一起讨论。

猜你在找的React相关文章