自动递增主键未递增

时间:2018-03-09 05:08:16

标签: javascript reactjs dexie

当我尝试连续两次提交表单时,似乎我的自动递增主键没有自动递增。我使用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 8dueDate 8等)。 您可以看到我首先将字段设置为8并成功提交。 Saving "8" but we don't know the primary key yet ("undefined")表示主键最初未定义。将每个字段设置为9之后,前一行是“保存”9“但我们现在还没有主键(”8“)。因此可以看出,添加后自动递增id不会增加。 Stacktrace

退出并重新启动应用程序后,提交将再次起作用。 我曾尝试将它包装在一个交易中,谷歌搜索,堆叠溢出,向众神祈祷,跳舞,然后哭了一下。有谁知道我在哪里弄错了?

0 个答案:

没有答案