Reactjs 从 Dexie.js 中删除一个项目
Reactjs delete an item from Dexie.js
此示例使用 Reactjs,Dexie.js. 我有一个没有 D 的 CRUD 应用程序,我目前需要它。虽然您可以将新项目输入并存储到数据库中,但我不确定如何 select 每个已添加的项目和删除它们。我知道您必须通过他们的 ID select 他们。
我用 i 标签附加了一个 .onClick={this.removal}
。但是,我不确定要向 removal
函数添加什么。
var datastored = new Dexie('MyPlace');
datastored.version(1).stores({entries:'++id, title, entry' });
datastored.open().catch(function(err){alert("Could not open database:"+err)});
var Dashboard = React.createClass({
getInitialState:function(){
return {results: [] }
},
runcheck:function(){
let arr = [];
datastored.entries
.each((uploaded)=>arr.push(uploaded))
.then(()=>this.setState({results:arr}));
},
componentDidMount:function(){
this.runcheck();
},
removal:function(){
datastored.entries.delete();
},
sendthru:function(){
var newInput = {
title: this.inputTitle.value,
entry: this.inputEntry.value
};
datastored.entries.add(newInput).then(()=>this.runcheck());
this.inputTitle.value = '';
this.inputEntry.value = '';
},
renderdem:function(){
var list = this.state.results.map(result =>{
return <tr key={result.id}>
<td>{result.id}</td>
<td>{result.title}</td>
<td>{result.entry}
<i className="fa fa-times-circle exout" aria-hidden="true" onClick={this.removal}></i>
</td>
</tr>
});
return (<div>
<p>Title</p>
<input type="text" id="inputname" className="form-control" ref={el => this.inputTitle = el} />
<p>Entry</p>
<textarea id="inputentry" ref={el => this.inputEntry = el} className="form-control"></textarea>
<button className="btn btn-info" onClick={this.sendthru}>Add</button>
<table className="table table-bordered"><tbody>{list}</tbody></table>
</div>);
},
render:function(){
return this.renderdem();}
});
ReactDOM.render(<Dashboard />, document.getElementById('main'));
我已经在 JSFiddle 中包含了我的代码
如您所见,您需要传递 id 才能知道要删除的内容。但是,将 removal
函数绑定到 onClick
时,您不能立即删除该条目。这里的技巧是让 removal
return 成为一个在点击发生时被调用的函数。
removal:function(id){
var component = this;
return function(evt) {
datastored.entries.delete(id);
component.runcheck();
}
}
这样使用:
<i className="fa fa-times-circle exout" aria-hidden="true" onClick={this.removal(result.id)}></i>
此示例使用 Reactjs,Dexie.js. 我有一个没有 D 的 CRUD 应用程序,我目前需要它。虽然您可以将新项目输入并存储到数据库中,但我不确定如何 select 每个已添加的项目和删除它们。我知道您必须通过他们的 ID select 他们。
我用 i 标签附加了一个 .onClick={this.removal}
。但是,我不确定要向 removal
函数添加什么。
var datastored = new Dexie('MyPlace');
datastored.version(1).stores({entries:'++id, title, entry' });
datastored.open().catch(function(err){alert("Could not open database:"+err)});
var Dashboard = React.createClass({
getInitialState:function(){
return {results: [] }
},
runcheck:function(){
let arr = [];
datastored.entries
.each((uploaded)=>arr.push(uploaded))
.then(()=>this.setState({results:arr}));
},
componentDidMount:function(){
this.runcheck();
},
removal:function(){
datastored.entries.delete();
},
sendthru:function(){
var newInput = {
title: this.inputTitle.value,
entry: this.inputEntry.value
};
datastored.entries.add(newInput).then(()=>this.runcheck());
this.inputTitle.value = '';
this.inputEntry.value = '';
},
renderdem:function(){
var list = this.state.results.map(result =>{
return <tr key={result.id}>
<td>{result.id}</td>
<td>{result.title}</td>
<td>{result.entry}
<i className="fa fa-times-circle exout" aria-hidden="true" onClick={this.removal}></i>
</td>
</tr>
});
return (<div>
<p>Title</p>
<input type="text" id="inputname" className="form-control" ref={el => this.inputTitle = el} />
<p>Entry</p>
<textarea id="inputentry" ref={el => this.inputEntry = el} className="form-control"></textarea>
<button className="btn btn-info" onClick={this.sendthru}>Add</button>
<table className="table table-bordered"><tbody>{list}</tbody></table>
</div>);
},
render:function(){
return this.renderdem();}
});
ReactDOM.render(<Dashboard />, document.getElementById('main'));
我已经在 JSFiddle 中包含了我的代码
如您所见,您需要传递 id 才能知道要删除的内容。但是,将 removal
函数绑定到 onClick
时,您不能立即删除该条目。这里的技巧是让 removal
return 成为一个在点击发生时被调用的函数。
removal:function(id){
var component = this;
return function(evt) {
datastored.entries.delete(id);
component.runcheck();
}
}
这样使用:
<i className="fa fa-times-circle exout" aria-hidden="true" onClick={this.removal(result.id)}></i>