Используя React, я применяю Dexie.js для этого примера. Однако я не считаю это особенно важным. Я хотел бы знать, как выполнить цикл объектов в моей базе данных IndexDB с помощью React.Петля с реактивом?
Как показано в моем коде ниже, dayta
имеет свою базу данных, и сохраняет friends
с name
и age
значений. Когда запускается моя функция 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
Итак, я добавил 'getInitialState' из' etv: [{name: '', age: ''}] ', так что это массив. Но я все еще получаю 'this.state.etv.map не функция '. Кроме того, я добавил 'var itemElements = this.state.etv.map (function (item, i) {return (li key = {i}> {item.name} li);});' –