redux

  1. //action.js
  2. import {INCREMENT,DECREMENT} from "./constant"
  3. export const createIncrement=data=>({type:INCREMENT,data})
  4. export const createDecrement=data=>({type:DECREMENT,data})
  1. //constant.js
  2. export const INCREMENT='increment'
  3. export const DECREMENT='decrement'
  1. //reducer.js
  2. import {INCREMENT,DECREMENT} from "./constant"
  3. const defaultState={
  4. counter:0
  5. }
  6. export default function countReducers(preState = defaultState, action) {
  7. //从action中拿到type与data
  8. const { type, data } = action;
  9. //根据type加工数据
  10. switch (type) {
  11. case INCREMENT:
  12. return {...preState,counter:preState.counter+data}
  13. case DECREMENT:
  14. return {...preState,counter:preState.counter-data}
  15. default:
  16. return preState;
  17. }
  18. }
  1. //store.js
  2. import {createStore} from 'redux'
  3. import countReducer from "./reducer.js"
  4. import {composeWithDevTools} from 'redux-devtools-extension'
  5. console.log( countReducer );
  6. export default createStore(countReducer,composeWithDevTools())

使用

  1. //about.jsx
  2. import React, { PureComponent } from 'react'
  3. import store from "../../redux/store"
  4. import {createDecrement} from "../../redux/action"
  5. export default class index extends PureComponent {
  6. state={
  7. counter:store.getState().counter
  8. }
  9. componentDidMount(){
  10. store.subscribe((()=>{
  11. this.setState({
  12. counter:store.getState().counter
  13. })
  14. }))
  15. }
  16. decrementClick (){
  17. store.dispatch(createDecrement(1))
  18. }
  19. fivedecrementClick (num,e){
  20. store.dispatch(createDecrement(num))
  21. }
  22. render() {
  23. const {counter}=this.state
  24. return (
  25. <div>
  26. <h1>减法区域</h1>
  27. <h2>当前计数为:{counter}</h2>
  28. <button onClick={c=>this.decrementClick()}>-1</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button onClick={c=>this.fivedecrementClick(5,c)}>-5</button>
  29. </div>
  30. )
  31. }
  32. }
  1. //home.jsx
  2. import React, { PureComponent } from 'react'
  3. import store from "../../redux/store"
  4. import {createIncrement} from "../../redux/action"
  5. export default class index extends PureComponent {
  6. state={
  7. counter:store.getState().counter
  8. }
  9. componentDidMount(){
  10. store.subscribe((()=>{
  11. this.setState({
  12. counter:store.getState().counter
  13. })
  14. }))
  15. }
  16. firstClick=()=>{
  17. store.dispatch( createIncrement(1))
  18. }
  19. fiveClick=()=>{
  20. store.dispatch( createIncrement(5))
  21. }
  22. render() {
  23. const {counter}=this.state
  24. return (
  25. <div>
  26. <h1>加法区域</h1>
  27. <h2>当前计数为:{counter}</h2>
  28. <button onClick={this.firstClick}>+1</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button onClick={this.fiveClick}>+5</button>
  29. </div>
  30. )
  31. }
  32. }