在作为“combineReducers”API 文档的一部分描述的示例中,在创建商店时,将“reducer”作为参数传递给文件“ app.js ”( let store = createStore(reducer)
)中的 createStore 。
但是在“ reducers/index.js ”中,函数名是“combineReducers”而不是“reducer”( export default combineReducers({..})
)。
那么在创建商店时传递的参数不应该是“combineReducers”(例如: let store = createStore(combineReducers
))吗??
我会说不。 仔细想想,Redux 只有一个reducer 功能。 本示例使用combineReducers
来创建该函数这一事实是一个实现细节。 就app.js
而言,它不知道也不关心该函数内部发生了什么、我们如何创建它或它在做什么。
另外,请注意,当reducers/index.js
执行export default combineReducers({})
,它实际上并不是_创建_一个名为“combineReducers”的东西。 它的意思是“获取此函数调用的结果,无论它是什么,并将其设为默认导出。” 事实上,从技术上讲,该输出甚至没有任何与之关联的真实变量名称。
最后,请注意,当您执行export default
,默认导出的任何文件导入都可以为局部变量提供它想要的任何名称,就像函数定义可以命名参数的方式与使用的任何变量名称不同呼叫站点。 例子:
function someFunction(a, fred, randomVariableName) {}
const firstVariable = 1;
const theMeaningOfLife = 42;
const aTotallyUselessName = "Whatever";
someFunction(firstVariable, theMeaningOfLife, aTotallyUselessName);
注意我在函数外定义的变量名如何与函数内的参数名没有任何对应关系。
同样,导出时:
// fileA.js
export default const aThing = 42;
// fileB.js
import iCanGiveThisAnyNameIWant from "fileA";
@markerikson感谢您提供这些出色的答案。
非常感谢@markerikson。
我正在学习 Redux 以与 JQuery 一起使用,减去 React 的知识。 您的回答现在可以帮助我更好地理解 React 代码示例。
最有用的评论
我会说不。 仔细想想,Redux 只有一个reducer 功能。 本示例使用
combineReducers
来创建该函数这一事实是一个实现细节。 就app.js
而言,它不知道也不关心该函数内部发生了什么、我们如何创建它或它在做什么。另外,请注意,当
reducers/index.js
执行export default combineReducers({})
,它实际上并不是_创建_一个名为“combineReducers”的东西。 它的意思是“获取此函数调用的结果,无论它是什么,并将其设为默认导出。” 事实上,从技术上讲,该输出甚至没有任何与之关联的真实变量名称。最后,请注意,当您执行
export default
,默认导出的任何文件导入都可以为局部变量提供它想要的任何名称,就像函数定义可以命名参数的方式与使用的任何变量名称不同呼叫站点。 例子:注意我在函数外定义的变量名如何与函数内的参数名没有任何对应关系。
同样,导出时: