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

做 网站 要专线吗dede视频网站源码

做 网站 要专线吗,dede视频网站源码,网站做跳转会有什么影响,下载百度网盘app1. 前言 在原始的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/82295/

相关文章:

  • 个人网站 创意now9999网站提示建设中
  • 建音乐网站wordpress的站点地图
  • 网站建设案例百度云我的家乡网站建设模板
  • 东莞市网络seo推广服务机构济南seo整站外包
  • 手机访问网站下面电话怎么做上海响应式网站建设
  • 西部数码网站管理助手serv-u默认密码大学生活网站设计
  • 网站建设公司北京做网站就上凡科建设
  • 建设部门的网站做视频点播网站
  • html5网站检测查看网站建设的特点
  • 免费发布卖车信息网站合肥瑶海区房子值得买吗
  • 中堂做网站如何快速推广自己的产品
  • 网站 维护 协议第一成品网站超市
  • 南昌企业网站建设哪家好手机优化管家
  • 网摘网站推广法新浪网站怎么做推广
  • 怎么让网站排名上去wordpress ui iphone
  • 网站建设 盈科如何用wordpress建一个网站
  • 哪个网站科技新闻好网络营销应具备的技能
  • 网站建设策划书模板下载广告网页
  • 西安cms建站模板中国建设银行官网个人网上银行
  • dede网站模板客seolxw
  • 做招商加盟做得比较好的网站wordpress 绿色版
  • 做网站的维护成本wordpress内链添加位置
  • 遥阳科技网站建设网站的着陆页
  • 潍坊信息网网站建设海外专用服务器
  • 有关网站建设的文章茂名h5网站建设
  • 建设部网站 规范下载上海的室内设计公司
  • 网站制作与网站建设pdf目前做啥网站致富
  • 网站seo内容优化做旅游攻略的网站代码
  • 石家庄哪家公司做网站好seo关键词外包公司
  • 手游网站源码下载河南省台前县建设局网站