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

如何将方法置于Redux状态的对象上?

丌官玺
2023-03-14
问题内容

根据文档,反应应用程序的状态必须是可序列化的。那班呢?

假设我有一个ToDo应用。到目前为止,每个Todo项目都具有namedate等属性。现在,我想对不可序列化的对象使用方法。即Todo.rename()这将重命名待办事项,做了很多其他的东西。

据我了解,我可以在某处声明rename(Todo)函数,然后通过props将该函数传递this.props.rename(Todo)给组件。

我在声明.rename()某个地方时遇到两个问题:1)在哪里?在减速器中?would be instance在应用程序的化简器中很难找到所有方法。2)传递此功能。真?我应该通过所有更高级别的组件手动传递它吗?每当我有更多方法时,添加大量的样板即可将其传递下去?或者总是这样做,并希望我对一种类型的对象只有一种重命名方法。不Todo.rename()
Task.rename()Event.rename()

这对我来说似乎很愚蠢。对象应该知道可以做什么以及用哪种方式。是不是?

我在这里想念的是什么?


问题答案:

在Redux中,您实际上没有自定义模型。您的状态应该是普通对象(或不可变记录)。它们不应具有任何自定义方法。

而不是将方法放在模型上(例如TodoItem.rename),您应该 编写处理动作的化简器 。这就是Redux的重点。

// Manages single todo item
function todoItem(state, action) {
  switch (action.type) {
    case 'ADD':
      return { name: action.name, complete: false };

    case 'RENAME':
      return { ...state, name: action.name };

    case 'TOGGLE_COMPLETE':
      return { ...state, complete: !state.complete };

    default:
      return state;
  }
}

// Manages a list of todo items
function todoItems(state = [], action) {
  switch (action.type) {
    case 'ADD':
      return [...state, todoItem(undefined, action)];

    case 'REMOVE':
      return [
        ...state.slice(0, action.index),
        ...state.slice(action.index + 1)
      ];

    case 'RENAME':
    case 'TOGGLE_COMPLETE':
      return [
        ...state.slice(0, action.index),
        todoItem(state[action.index], action),
        ...state.slice(action.index + 1)
      ];
  }
}

如果这仍然没有意义,请通读Redux基础教程,因为您似乎对Redux应用程序的结构有错误的认识。



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

  • 对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id:

  • 我的JavaScript对象的状态声明如下: 我有一个方法changeState(),它基本上执行以下操作: 然而,这将给我一个错误,即“setState”不是一个函数。如何从方法中更改此标志? 编辑:我不知道如何正确绑定。SOF一允许我就接受解决方案

  • 问题内容: 鉴于我的初始还原状态为: 我需要做一个减速器来做到这一点: 我是使用Redux工作流程的新手,解决此问题的最佳方法是将roomList设置为immutable.js对象或编写一些代码以对我的状态对象进行深层克隆。 state.roomList还将从将来的功能中推送新数据。 总结/问题: 在状态深处进行此类更改时,在reducer中返回新状态对象的最佳方法是什么,还是应该更改Redux状

  • 鉴于我的初始重复状态为: 我需要做一个减速器,它可以: 我不熟悉使用Redux工作流,解决这个问题的最好方法是将roomList设置为不可变的。js对象或编写一些代码来深度克隆我的状态对象。 此外state.room列表将从未来的功能中向其推送新数据。 总结/问题:当在状态中进行如此深入的更改时,在reducer中返回新状态对象的最佳方式是什么,还是应该更改Redux状态对象的结构? 我所做的最终

  • 问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。