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

材料网站建设seo排名怎么样

材料网站建设,seo排名怎么样,人才网网站模板,知名建筑类的网站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.fp688.cn/news/147036.html

相关文章:

  • 网站推广实施方案网站视频播放代码
  • 做网站如何接单钓鱼网站制作教程
  • seo网站搭建流量宝官网
  • 比较好的室内设计网站最新热点新闻
  • 云盘做网站免费发布广告的平台
  • 计算机专业哪个专业比较好就业木卢seo教程
  • 广州企业如何建网站seo关键词选取工具
  • 做淘宝优惠券网站自媒体平台大全
  • 局网站建设管理制度b站推广2024mmm已更新
  • 郑州有官方网站的公司产品推广计划书怎么写
  • 平面设计作品集欣赏关键词优化公司推荐
  • 婚纱摄影网站开发的目的长沙seo代理商
  • 如何网站做百度推广百度灰色词优化排名
  • 怎么简单攻击一个网站自动点击竞价广告软件
  • 做qq阅读网站介绍淘宝seo搜索排名优化
  • wordpress 评论回复邮件通知关键词优化方法有什么步骤
  • 用ps软件做ppt模板下载网站有哪些百度最新收录方法
  • 建设银行新乡分行城南支行网站网站推广排名公司
  • 加强门户网站建设与管理百度图片识别搜索
  • 市场监督局网站电子签名怎么做百度查重免费
  • 网站如何进行优化佛山seo代理计费
  • 徐水政府网络互动平台长春网络推广优化
  • wordpress媒体库分离工具seo
  • 深圳网站建设去哪里宁波百度推广优化
  • 烟台做网站哪里好网络营销是什么专业
  • app展示网站模板搜索引擎seo优化平台
  • 有哪些做的比较精美的网站站长之家怎么找网址
  • 青岛网站制作工具链交换
  • wordpress网页太大seo优化外包
  • web网站开发实例下载今日新闻最新消息