Javascript Redux中间件无限循环?
在下面的代码片段中,我很难理解Javascript Redux中间件无限循环?,javascript,redux,react-redux,Javascript,Redux,React Redux,在下面的代码片段中,我很难理解result=next(action)如何不是一个无限循环。因为“last function”action=>采用参数action,并基于采用next参数(next=>action=>)的函数计算结果值,然后再次调用采用action参数(next=>action=>)的函数 本质上,这段代码的递归性很难理解 import C from '../constants' import appReducer from './reducers' import { create
result=next(action)
如何不是一个无限循环。因为“last function”action=>
采用参数action
,并基于采用next
参数(next=>action=>
)的函数计算结果
值,然后再次调用采用action
参数(next=>action=>)的函数
本质上,这段代码的递归性很难理解
import C from '../constants'
import appReducer from './reducers'
import { createStore, applyMiddleware } from 'redux'
const consoleMessages = store => next => action => {
let result
console.groupCollapsed(`dispatching action => ${action.type}`)
console.log('ski days', store.getState().allSkiDays.length)
result = next(action)
let { allSkiDays, goal, errors, resortNames } = store.getState()
console.log(`
ski days: ${allSkiDays.length}
goal: ${goal}
fetching: ${resortNames.fetching}
suggestions: ${resortNames.suggestions}
errors: ${errors.length}
`)
console.groupEnd()
return result
}
export default (initialState={}) => {
return applyMiddleware(consoleMessages)(createStore)(appReducer, initialState)
next
不是某个函数的名称,而是参数名称
调用next
不会调用action=>{…}
函数
这里没有任何递归
重写代码可能会为您澄清一些事情:
function consoleMessages(store) {
return function (next) {
return function (action) {
...
let result = next(action)
...
}
}
}
next
不是某个函数的名称,而是参数名称
调用next
不会调用action=>{…}
函数
这里没有任何递归
重写代码可能会为您澄清一些事情:
function consoleMessages(store) {
return function (next) {
return function (action) {
...
let result = next(action)
...
}
}
}
谢谢因此,当一个“动作”发生时,它就会触发整个事件。当你给下一个“对象”动作时,它在做什么?控制台消息是否正在尝试显示当前正在发生的操作?添加action=>{..}函数的原因是否在于它具有执行异步函数的能力?因为您可能认为“result=next(action)”可以在同时接受next和action对象的函数中实现。不确定为什么最后一个函数是必需的。“下一个‘对象’在执行操作时会做什么?”next
是一个函数。我不知道它是干什么的。请随意在applyMiddleware
API中查找它。“添加action=>{..}函数的原因是它具有执行异步函数的能力吗?”我不太明白您在这里想问什么。我认为您不理解的是,applyMiddleware
函数需要一个以某种方式运行的参数。这种行为的原因完全在于applyMiddleware
函数,因此我建议您如果想了解其工作原理,请查看源代码。谢谢。因此,当一个“动作”发生时,它就会触发整个事件。当你给下一个“对象”动作时,它在做什么?控制台消息是否正在尝试显示当前正在发生的操作?添加action=>{..}函数的原因是否在于它具有执行异步函数的能力?因为您可能认为“result=next(action)”可以在同时接受next和action对象的函数中实现。不确定为什么最后一个函数是必需的。“下一个‘对象’在执行操作时会做什么?”next
是一个函数。我不知道它是干什么的。请随意在applyMiddleware
API中查找它。“添加action=>{..}函数的原因是它具有执行异步函数的能力吗?”我不太明白您在这里想问什么。我认为您不理解的是,applyMiddleware
函数需要一个以某种方式运行的参数。这种行为的原因完全在于applyMiddleware
函数,因此我的建议是,如果您想了解其工作原理,请查看源代码。