2016-08-01 3 views
0

Используя 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; 
     }  
    } 

}); 

ответ

2

Вы можете выполнить цикл отдельно и вернуть его jsx. Затем вы можете использовать возвращаемое значение в своем шаблоне, так как поддерживаются массивы частичных частей jsx.

render: function() { 
    var itemElements = this.state.items.map(function(item, i) { 
     return (
      <li>{item}</li> 
     ); 
    }); 

    return (
     <ul> 
      {itemElements} 
     </ul> 
    ); 
} 
+0

Эй. Я получаю 'this.state.etv.map не является ошибкой функции, следуя вашей структуре. –

+1

Правильно, если 'this.state.etv' не является массивом, то он не будет иметь функцию' map() '. Ваша переменная состояния должна быть массивом, чтобы перебирать ее. Я сделаю свой пример более общим, чтобы не вводить в заблуждение. – Soviut

+0

Итак, я добавил 'getInitialState' из' etv: [{name: '', age: ''}] ', так что это массив. Но я все еще получаю 'this.state.etv.map не функция '. Кроме того, я добавил 'var itemElements = this.state.etv.map (function (item, i) {return (li key = {i}> {item.name}

Смежные вопросы