我正在浏览Redux文档,并从此处的Todo示例开始:
https://github.com/reactjs/redux/tree/master/examples/todos
它工作正常。我有一些基本的东西我不理解。以下是index.js文件中定义操作的代码段:
let nextTodoId = 0
export const addTodo = (text) => ({
type: 'ADD_TODO',
id: nextTodoId++,
text
})
可以在以下URL看到整个文件:
https://github.com/reactjs/redux/blob/master/examples/todos/src/actions/index.js
如您所见,变量nextTodoId在'addtodo'函数之外初始化。我想知道每次调用该函数时'nextTodoId'变量不会重置为0是怎么回事?
有人可以解释一下吗?
谢谢你的时间。
最佳答案
在与nextTodoId
函数相同的作用域(模块作用域)中声明addTodo
变量。
模块文件中的内容被视为包含在作用域闭包中,就像函数闭包一样。
模块仅评估一次,即使多次导入也是如此。因此,nextTodoId
变量仅声明一次,并且每次调用addTodo
函数将使用nextTodoId
变量的当前值。
关于javascript - Github上的Redux ToDo示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48969097/