当前位置: 首页 > 面试题库 >

在Redux中,状态实际存储在哪里?

谢奕
2023-03-14
问题内容

我对这个问题进行了一些搜索,但发现了非常模糊的答案。在redux中,我们知道状态存储为对象。但是这种状态实际上存储在哪里?它是否以某种方式保存为文件,以后我们可以访问?我所知道的是,它不会以Cookie格式或浏览器的本地存储方式存储它。


问题答案:

Redux中的状态存储在Redux存储中的内存中。

这意味着,如果刷新页面,该状态将消失。

您可以想象该商店看起来像这样:

function createStore(reducer, initialState) {
  let state = initialState // <-- state is just stored in a variable that lives in memory

  function getState() {
    return state
  }

  function dispatch(action) {

    state = reducer(state, action) // <-- state gets updated using the returned value from the reducer

    return action
  }

  return {
    getState,
    dispatch
  }
}

redux中的状态只是一个保留在内存中的变量,因为所有redux函数都通过状态引用(通过closure)。

这是正在发生的事情的简化示例:

function example() {

  let variableAvailableViaClosure = 0



  function incrementTheClosureVariable() {

    variableAvailableViaClosure += 1

  }



  function getTheClosureVariable() {

    return variableAvailableViaClosure

  }



  return {

    incrementTheClosureVariable,

    getTheClosureVariable

  }

}



let data = example()



// at this point example is finished

// but the functions it returned

// still have access to the (internal) variable via closure



console.log(

  data.getTheClosureVariable() // 0

)



data.incrementTheClosureVariable()



console.log(

  data.getTheClosureVariable() // 1

)

此外,声明

在redux中,我们知道状态存储为对象。

是不正确的。redux中的状态可以是任何有效的javascript值,而不仅仅是对象。通常,将它作为对象(或像数组这样的特殊对象)是最有意义的,因为它允许更灵活的数据结构(但是,如果您愿意,可以将状态设为数字)

查看实际的Redux
实现以获取更多详细信息。

如果希望状态保留在cookie或localStorage中,则可以增强存储,以便在更新内存中的状态之外,还将状态保存到所需的存储中(并在初始化存储时从该存储中加载)



 类似资料:
  • 问题内容: 我只是做一个简单的应用程序来学习与redux异步。我已经使所有工作正常进行,现在我只想在网页上显示实际状态。现在,我实际上如何在render方法中访问商店的状态? 这是我的代码(所有内容都在一页中,因为我只是在学习): 因此,在状态的render方法中,我想列出商店中的所有内容。 谢谢 问题答案: 您应该创建单独的组件,该组件将侦听状态更改并在每次状态更改时进行更新:

  • 我只是做了一个简单的应用程序学习异步与Redux。我已经使所有的工作,现在我只想显示的实际状态到网页上。现在,我如何在render方法中实际访问存储的状态? 这里是我的代码(所有内容都在一个页面中,因为我只是在学习): 谢谢

  • 下面是一个简单的场景: 用户单击“Create order”:将创建一个订单(首先保持其状态=NEW) 用户完成订单填写后,单击SAVE-->state is now Submited 当另一个检查订单并验证它时,必须进行一个过程。只有在调用了其他一些服务并给予许可时,才会验证该订单。 整个工作流程是: null null 谢谢

  • 我觉得Angular对模型的使用让人困惑。Angular似乎采取的方法是,模型可以是任何你喜欢的--即。Angular不包含显式的模型类,您可以使用常规JavaScript对象作为模型。 “编辑”这个问题的第二个答案很有趣,也很接近我目前使用的。

  • 问题内容: 我正在使用Redux进行状态管理。 如何将商店重置为初始状态? 例如,假设我有两个用户帐户(和)。 想象以下事件序列: 用户登录到该应用程序并执行某些操作,因此我们在存储中缓存了一些数据。 用户注销。 用户无需刷新浏览器即可登录应用程序。 此时,缓存的数据将与关联,我想对其进行清理。 当第一个用户注销时,如何将Redux存储重置为其初始状态? 问题答案: 一种方法是在应用程序中编写根减

  • 我安装了一些仅在特定工作区中启用的扩展。 通过设置,通常工作区特定的东西会保存在工作区文件夹中的. vscode/settings.json中。然而,扩展似乎不是这种情况。 我知道扩展本身也安装在。vscode/extensions在user profile文件夹中,但我找不到任何指示它们是启用还是禁用的内容。这适用于本地、远程和给定工作区。 检查设置同步似乎会显示一个extensions.jso