当前位置: 首页 > news >正文

厦门做网站个人网站建设项目的预算

厦门做网站个人,网站建设项目的预算,wordpress 页面跳转,wordpress 预订1. 前言 在原始的redux里面,action必须是plain object,且必须是同步。而我们经常使用到定时器,网络请求等异步操作,而redux-thunk就是为了解决异步动作的问题而出现的。 2. redux-thunk中间件实现源码 function createThunkMidd…
1. 前言

        在原始的redux里面,action必须是plain object,且必须是同步。而我们经常使用到定时器,网络请求等异步操作,而redux-thunk就是为了解决异步动作的问题而出现的。

2. redux-thunk中间件实现源码
function createThunkMiddleware(extra) {return ({ dispatch, getState}) => next => action => {if(typeof action === 'function') {return action(dispatch, getState, extra);}return next(action);        }
}
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;
2.1 此处dispatch = compose(...chain)(store.dispatch)
  • action(dispatch)中的这个dispatch可能并不是store.dispatch
  • action(dispatch)执行后,如果action函数体使用dispatch({...}),动作{...}也会层层传递下去,直到传递给store.dispatch({...})
  • 举个例子,比如说dispatch= f(g(h(store.dispatch)))),那么action(dispatch)函数体中执行到dispatch({...}),动作传递过程是: f(g(h(store.dispatch)))({...}) -> g(h(store.dispatch))({...}) -> h(store.dispatch)({...}) -> store.dispatch({...})
2.2 此处next的对应关系

        继续举个例子,比如说dispatch = f(g(h(store.dispatch))))

  • 如果当前中间件指向f,则next对应g(h(store.dispatch))
  • 如果当前中间件指向g,则next对应h(store.dispatch)
  • 如果当前中间件指向h,则next对应store.dispatch(真实的dispatch)
3. redux中applyMiddleware方法源码
export const applyMiddleware = (...middlewares) => {return createStore => (reducer, preloadedState) => {const store = createStore(reducer, preloadedState);let dispatch = () => {throw new Error('xxxx');};const middlewareAPI = {getState: store.getState,dispatch: (action, ...args) => dispatch(action, ...args)};const chain = middlewares.map(middleware => middleware(middlewareAPI));dispatch = compose(...chain)(store.dispatch);return {...store,dispatch}}
};export const compose = (...funcs) => {if(funcs.length === 0) {return arg => arg;}if(funcs.length === 1) {return funcs[0];}return funcs.reduce((prev, cur) => {return (...args) => {prev(cur(...args));} });
}
4. redux中createStore增加第3个参数
export const createStore = (reducer, preloadedState, enhancer) => {// 初始化statelet state = preloadedState;// 保存监听函数const listeners = [];// 返回store当前保存的stateconst getState = () => state;// 通过subscribe传入监听函数const subscribe = (listener) => {listeners.push(listener);}// 执行dispatch,通过reducer计算新的状态state// 并执行所有监听函数const dispatch = (action) => {state = reducer(state, action);for(const listener of listeners) {listener();}}!state && dispatch({});if(enhancer) {return enhancer(createStore)(reducer, preloadedState);}return {getState,dispatch,subscribe,}
}

注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~  

http://www.yayakq.cn/news/900594/

相关文章:

  • 天津网站开发公司定制制作网站设计
  • 服务器可以做几个网站吗长春网站建设找源晟
  • 国外 素材 网站建筑模型网站
  • 如何申请一个网站网站建立健全举报工作机制
  • 重庆品牌型网站建设多少钱网站的服务器是什么
  • 如何制作网站机器人a链接下载wordpress
  • 免费网站建设入门龙岗品牌网站建设
  • 做彩网站怎么做论坛社区网站
  • 建设苏州旅游网站的方案策划书单仁营销网站的建设
  • 甘肃农村网站建设项目营销推广方案
  • 一个网站怎么做新闻模块南京 公司网站制作
  • 网站建设工作分解找活做的网站
  • 腾讯网站国家企业信息系统公示系统下载
  • 西安北郊做网站公司中国企业500强榜单2023
  • 企业网站做口碑营销微网站建设的第一步是进行首页的设置
  • wordpress登陆注册界面seo教程pdf
  • 苏州相城区做网站公司温州优化售后
  • 淘宝网站建设目的网站建设工作内容
  • 建设网络文化网站的请示建设银行官方网站注册
  • 网站 asp.net php页面设置标签wordpress
  • 企业建站技术access 网站内容管理系统 哪个好 下载
  • html怎么设置网站吗织梦网站下载地址
  • 深圳买门的网站建设免认证域名注册
  • 天津网站快速备案网站建设顾问
  • 织梦 网站源码城乡住房建设部网站
  • 可以做微积分的网站牡丹江建设厅网站
  • 学做电商网站院感质控中心网站建设 申请
  • 指数基金怎么选网站seo属于什么专业
  • 网站建设调研背景东莞品牌设计公司
  • 网站备案 核验单搭建网站需要什么工具