几个问题
总结
Redux使用的痛点
为什么要使用Redux
如何优化Redux
redux-actions
初始化reducer和action构造器时减少样板代码
更多具体操作()https://www.jianshu.com/p/d2615a7d725e
减少action固定的方法
createAction:
创建action工厂的一个操作,返回一个action工厂。
第一个参数:action类型
第二个参数:生成action的函数。此函数的可以传递参数,参数值为实际调用action工厂函数时传递的参数。
import {INCREMENT,DECREMENT} from '../constant'//未优化前export const increment = (data)=>({type:INCREMENT,data:data});export const decrement = (data)=>({type:DECREMENT,data:data});export const incrementAsync = (data,time) =>{return (dispatch)=>{setTimeout(function(){console.log(data);dispatch(increment(data))},time)}}//优化后import { createAction } from 'redux-actions';export const increment = createAction([INCREMENT],(data)=>data);export const decrement = createAction([DECREMENT],(data)=>data);export const incrementAsync = createAction('incrementAsync',(data,time) =>{return (dispatch)=>{setTimeout(function(){console.log(data);dispatch(increment(data))},time)}});
减少reducer时固定的switch
import {INCREMENT,DECREMENT} from '../constant'//未优化前const initState = 0;export default function countReducer(preState=initState,action){const {type,data} = actionswitch (type) {case INCREMENT:return preState + datacase DECREMENT:return preState - datadefault:return preState}}//优化后import { handleActions } from 'redux-actions';export default handleActions({[INCREMENT]:(preState,action) => (preState + action.payload),[DECREMENT]:(preState,action) => (preState - action.payload),},0)
如何解决异步问题
总结
为什么redux处理不了异步问题
解决异步问题- 中间件(原理:改造dispatch)
Redux-thunk
store.js
//引入createStore,专门用于创建redux中最为核心的store对象
import {createStore,applyMiddleware} from 'redux'
//引入为Count组件服务的reducer
import reducer from './reducers'
//引入redux-thunk,用于支持异步action
import thunk from 'redux-thunk';
//暴露store
export default createStore(reducer,applyMiddleware(thunk))
Redux-saga


