当我尝试连续两次提交表单时,似乎我的自动递增主键没有自动递增。我使用Dexie作为我的DB包装器。文件如下。
数据库(db.js)
const Dexie = require('dexie');
const schema = '++id, name, priority, dueDay, dueMonth, description, creationTime, &hash';
const db = new Dexie('main');
db.version(1).stores({
items: schema,
archives: schema,
});
db['items'].hook('creating', function (primaryKey, friend) {
console.log(`Saving "${friend.name}" but we don't now the primary key yet ("${primaryKey}").`);
this.onsuccess = function (primaryKey) {
console.log(`Saved "${friend.name}" with primary key "${primaryKey}".`);
};
return undefined;
});
export default db;
和我的Main.jsx(重要部分)
addItem(item) {
// Add the item to the db. This will give the item a unique primary key, returned
// by the add operation. Assign that key to the object, and add the object to the state.
let updatedItems = this.state.items;
db.items.add(item)
.then(id => {
item.id = id;
updatedItems.push(item);
this.setState({
items: updatedItems
})
return Promise.resolve(item.id)
})
}
和AddItem.jsx(创建和提交表单的位置)。 handleChange
只是将该变量的状态设置为输入框中的内容。
handleSubmit(e) {
e.preventDefault();
this.state.creationTime = new Date().getTime();
this.props.addItem(this.state);
}
render() {
return (
<div>
<div className="add">
+
</div>
<form onSubmit={this.handleSubmit}>
<input name="name" type="text" onChange={this.handleChange} />
<input name="dueDay" type="number" onChange={this.handleChange} />
<input name="dueMonth" type="number" onChange={this.handleChange} />
<input name="description" type="text" onChange={this.handleChange} />
<input name="priority" type="number" onChange={this.handleChange} />
<input type="submit" value="Submit" />
</form>
</div>
)
下面是再现错误的图片。我正在将更改记录到状态(即name 8
,dueDate 8
等)。
您可以看到我首先将字段设置为8并成功提交。 Saving "8" but we don't know the primary key yet ("undefined")
表示主键最初未定义。将每个字段设置为9之后,前一行是“保存”9“但我们现在还没有主键(”8“)。因此可以看出,添加后自动递增id不会增加。
退出并重新启动应用程序后,提交将再次起作用。 我曾尝试将它包装在一个交易中,谷歌搜索,堆叠溢出,向众神祈祷,跳舞,然后哭了一下。有谁知道我在哪里弄错了?