📜  nvariant Violation: Store error: 应用程序试图写入一个没有提供 id 的对象,但 store 已经包含该对象的 JuristicCustomer_529958 的 id. - Javascript(1)

📅  最后修改于: 2023-12-03 15:18:04.318000             🧑  作者: Mango

"nvariant Violation: Store error":JavaScript 中的错误类型

介绍

当使用 Flux 或 Redux 这样的状态管理库时,我们可能会遇到这种错误:"nvariant Violation: Store error: 应用程序试图写入一个没有提供 id 的对象, 但 store 已经包含该对象的 JuristicCustomer_529958 的 id"。这是一个常见的错误,意味着我们试图更新一个缺少标识符的对象,而该对象已经存在于状态管理库中。

解决方案

为了解决这个问题,我们需要为每个对象分配一个唯一的标识符。在 Redux 中,我们可以使用一个库,比如 uuid,来生成这些标识符。在处理新的对象时,我们可以使用这些标识符来确保它们不会重复插入状态。

另外,我们也可以在更新一个对象时,确保它已经存在于状态中,并附带一个正确的标识符,避免出现上述错误。

最后,我们也可以在状态管理库中添加一些自定义的检查,确保我们的应用程序不会因为缺少必要的标识符而崩溃。

代码示例

以下是一个示例,展示如何使用 uuid 库为每个新的 JuristicCustomer 分配一个唯一的标识符:

import uuid from 'uuid';

const ADD_CUSTOMER = 'ADD_CUSTOMER';

function addCustomer(customer) {
  return {
    type: ADD_CUSTOMER,
    payload: {
      id: uuid(),
      customer
    }
  };
}

// reducer 函数
function customersReducer(state = [], action) {
  switch (action.type) {
    case ADD_CUSTOMER:
      return [
        ...state,
        action.payload
      ];
    default:
      return state;
  }
}

在这个示例中,我们使用 uuid() 函数为每个新的 JuristicCustomer 分配一个唯一的标识符,并将其添加到状态管理库中。避免了出现“nvariant Violation: Store error”错误。

以上就是解决“nvariant Violation: Store error”错误的方法和示例,希望对你有所帮助。