我正在浏览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/

10-09 19:03