将 Reactjs 与 Dexie.js 一起使用?
Using Reactjs with Dexie.js?
我正在尝试弄清楚如何将反应状态设置为数据库的值。我正在使用 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
以从我的数据库中获取数据?
问题与 Dexie.js 无关(顺便说一句,不错的 indexDB 包装器)。您从作为处理程序传递给 .then
的回调中调用 this.setState()
。在承诺上下文中调用回调时 this
是 undefined
.
要解决这个问题,您需要显式设置回调的 this
,使用 .bind
或旧的 that = this
,或者只使用箭头函数(demo ):
.then((samba) => {
console.log(samba.race);
this.setState({
century: samba.race
});
});
我正在尝试弄清楚如何将反应状态设置为数据库的值。我正在使用 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
以从我的数据库中获取数据?
问题与 Dexie.js 无关(顺便说一句,不错的 indexDB 包装器)。您从作为处理程序传递给 .then
的回调中调用 this.setState()
。在承诺上下文中调用回调时 this
是 undefined
.
要解决这个问题,您需要显式设置回调的 this
,使用 .bind
或旧的 that = this
,或者只使用箭头函数(demo ):
.then((samba) => {
console.log(samba.race);
this.setState({
century: samba.race
});
});