使用React+Redux+Dexie重复存储数据报ConstraintError问题求助
解决Dexie存储时的
ConstraintError: Key already exists问题 嘿,我来帮你搞定这个报错~
你遇到的这个错误,核心原因是Dexie的add()方法只允许插入全新的、主键不重复的记录。
看你的数据库schema,table表的主键是++id(自增主键),第一次存储正常是因为当时传入的data里没有带id字段,Dexie自动帮你生成了唯一的自增ID。但第二次存储时,大概率是你传入的data对象里带上了之前已经存在的id值,触发了主键唯一性约束,所以抛出了这个错误。
给你两个针对性的解决方案:
方案1:如果是要添加全新记录
确保你传入的data里没有id字段,让Dexie自动生成新的自增ID。可以在存储前手动移除id:
return dispatch => { // 复制data并删除id字段(避免修改原数据) const newData = { ...data }; delete newData.id; db.table .add(newData) .then(function(id){ console.log(id) }) .catch(function(error){ console.log("Error: " + error); }); }
方案2:如果是要更新已有记录(或兼容新增/更新)
如果你第二次操作是想更新之前的记录,或者希望方法自动判断是新增还是更新,直接把add()换成put()就好。put()方法的逻辑是:主键存在则更新,不存在则插入,完美适配这种场景:
return dispatch => { db.table .put(data) // 替换add为put .then(function(id){ console.log(id) }) .catch(function(error){ console.log("Error: " + error); }); }
再确认下你的schema:++id已经正确定义了自增主键,只要按照上面的方式调整,就能解决这个重复键的问题啦~
内容的提问来源于stack exchange,提问作者MD Ashik
相关产品推荐
相关产品推荐

