将Reactjs与Dexie.js一起使用?

时间:2016-07-28 19:03:39

标签: javascript reactjs dexie

我试图找出如何将反应状态设置为数据库的值。我正在使用Dexie.js

var Duck = React.createClass({
getInitialState:function(){
return { century:'' }
},

fridge:function(){

var db = new Dexie('homie');
db.version(1).stores({
friends:'name, race'});

db.open().catch(function(){
alert("Open failed: ");
});

db.friends.put({name: 'Johnny', race:'hispanic'}).then(function(){
return db.friends.get('Johnny');
}).then(function(samba){
console.log(samba.race);
this.setState({century: samba.race});
});
},

render:function(){
return (<div>
<input type="submit" value="Submeet" onClick={this.fridge} />
<p>{this.state.century}</p>
</div>);
}

fridge函数有效,因为它将相应的项放在数据库中。代码中唯一不起作用的部分是this.setState({century:samba.race})。这导致Cannot read property 'setState' of undefined的错误。

我如何重新执行setState从数据库中获取数据?

1 个答案:

答案 0 :(得分:2)

问题与Dexie.js(nice indexDB wrapper btw)无关。您从作为处理程序传递给this.setState()的回调中调用.then。在promise内容this内调用回调时,undefined

要解决此问题,您需要使用this或旧.bind显式设置回调的that = this,或者只使用箭头功能(demo):

 .then((samba) => {
    console.log(samba.race);
    this.setState({
      century: samba.race
    });
  });