0
Reactを使用して、この例ではDexie.jsを実装しています。しかし、私はこれが特に重要であるとは思わない。 Reactを使用してIndexDBデータベース内のオブジェクトのループを実行する方法を知りたいと思います。ループで反応しますか?
以下のコードに示すように、dayta
には私のデータベースが保存され、name
とage
の値を持つfriends
が格納されます。私の関数carveit
が実行されると、ユーザーが入力した内容が取り込まれ、その値が{this.state.etv}
に配置されます。コードは機能します。
しかし、私はどのように{this.state.etv}
すべてのエントリを表示するかわかりません。つまり、最新の追加だけが表示されます。私は何らかのループを実行して、map
関数を使用しなければならないことを理解していますが、それについてはわかりません。
var React = require('react');
module.exports = React.createClass({
getInitialState: function(){
return { etv:'' }
},
carveit:function(){
var enteringtitle = document.getElementById('entertitle').value;
var enteringmessage = document.getElementById('enterentry').value;
var dayta = new Dexie('testcase');
dayta.version(1).stores({
friends:'name, age'
});
dayta.open().catch(function(error){
alert("Oh no son: " +error);
});
dayta.friends.add({
name: enteringtitle,
age: enteringmessage
});
dayta.friends.each((friend)=>{
this.setState({etv: friend.name});
});
},
functionrun:function(){
return (<div>
<ul>
<li>{this.state.etv}</li>
</ul>
<p>Entry Title</p>
<input id="entertitle" type="text" className="form-control"/>
<p>Your Entry</p>
<textarea id="enterentry" className="form-control"></textarea>
<input id="entrytitle" type="submit" value="Publish" onClick={this.carveit} />
</div>);
},
render:function(){
if (this.props.contentadd){
return this.functionrun();
}
else {
return null;
}
}
});
あなたの構造に従うとき、 'this.state.etv.mapは関数ではありません.'というエラーが出ます。 –
'this.state.etv'が配列でない場合、' map() '関数を持たないでしょう。あなたの状態変数は、それをループするために配列である必要があります。私は私の例をより一般的なものにして誤解を招かないようにします。 – Soviut
したがって、etv:[{name: ''、age: ''}] 'のgetInitialStateを配列に追加しました。しかし、私はまだ 'this.state.etv.mapは関数ではありません。また、「var itemElements = this.state.etv.map(function(item、i){return(li key = {i}> {item.name} li);}); ' –