【问题标题】:where to generate uid in a redux based app在基于 redux 的应用程序中在哪里生成 uid
【发布时间】:2020-05-20 09:56:00
【问题描述】:

我正在构建一个 react+redux 应用程序,我很难决定在哪里为我的数据生成 uid。

为了简化问题,我将使用经典的待办事项应用示例来解释我的问题(我的应用比这复杂得多)。

我目前有 addTodo、selectTodos、updateSelectedTodos 和 deleteSelectedTodos 的 reducer

我正在调度 addTodo 操作之前在我的反应组件中生成 uid。

selectTodos 将选中的 uid 存储在 state 中。

updateSelectedTodos 和 deleteSelectedTodos 将更新/删除状态中“已选择”列表中列出的待办事项。

现在我需要添加一个新操作“duplicateSelectedTodo”,但我不确定最好的方法。我需要为重复项生成新的 uid。 因为我不能直接在减速器中这样做,所以这是我正在考虑的解决方案: - 在我的组件中检索选定的 id,生成新的 id 并使用一组新的 id 发送副本 - 相同,但包含待办事项的所有数据(可能是很多数据) - 编写一个“addUid”中间件,它将首先触发并为所有需要一些 uid 的操作生成 uid。

欢迎任何建议:)

ps : 像现在这样在组件中生成 uid 对我来说感觉不对...

【问题讨论】:

  • 你的数据库可以生成uuid吗?
  • @JosephD。我没有数据库,它是一个单页应用程序

标签: reactjs redux uuid


【解决方案1】:

您应该在创建动作的过程中生成 ID。

如果您是手动编写动作创建器,可能是:

const addTodo = (text) => {
  const id = uuid();
  return {type: "todos/addTodo", payload: {text, id}}
}

如果您使用的是Redux Toolkit's createSlice API(我会强烈推荐),它看起来像:

const todosSlice = createSlice({
  name: "todos",
  initialState: [],
  reducers: {
    addTodo: {
      reducer(state, action) {
        state.push(action.payload);
      },
      prepare(text) {
        const id = uuid();
        return { payload: {text, id} };
      }
    }

  }
})

【讨论】:

  • 我确实使用 redux 工具包和 createSlice :) 太棒了,谢谢!即使我几乎阅读了完整的文档,我仍然没有抓住那个。这就像文档作者假设您已经是 Redux 专家并且正在切换到工具包。 :(
  • 实际上,是的,这 RTK 文档当前的编写方式 - 他们假设您 已经熟悉如何手动使用 Redux 并且关注使用 RTK 时的差异。当前的文档在 Intermediate Tutorialthe createSlice API reference 中谈论“准备回调”。
猜你喜欢
  • 2020-11-07
  • 2018-11-10
  • 2016-04-21
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多