Üzerinden alınan bir veri dizisini temel alan bir veri satırı (<tr>
vb.) Oluşturan bir bileşenim var. Bir AJAX çağrısı. Her şey verileri düzenlemek ve eklemek için iyi çalışır, ancak dizinin farklı bir kopyasının (içerilen nesnelerin ayrı kopyaları ile - ref ile değil, val ile) nasıl belirlendiğini belirleyemiyorum. Veriler, uygulanabilir satır tablodan kaldırılır.React JS: bir öğenin nesneler olduğu yer olan this.state.data öğesinden doğru şekilde nasıl kaldırılır
Halihazırda bulunan nesneler ref tarafından yapıldığı için, dizinin bir kopyasını oluşturduğumda bile, tablomun son satırı kaldırılmıştır (satır dizini ve verileri AJAX çağrısında doğru şekilde başvurulan ve silinmiş olsa bile) . Ben tetiklenmez kılmasıdır yüzden uygun bir diff yapamaz tepki anlıyorum, bu yüzden bu nasıl işleneceğini gösterir misin
handleRowDelete: function(rowIdx) {
// Correct row
var row = this.state.data[rowIdx];
// This makes a new array, but the contained objects are still by ref
var rows = this.state.data.slice();
// This contains the proper row that will be deleted. If this array is set to data, the table is updated to reflect just the one row - as expected.
var throwout = rows.splice(rowIdx, 1);
console.log(throwout);
// Whether I set via the React.addons:
var newState = React.addons.update(this.state, {
data: { $set: rows }
});
this.setState(newState);
// Or just set the state again via this.setState(...)
//this.setState({data: rows, add: false});
// It always just removes the last row in the component render
// Even though the proper row gets deleted following in AJAX call
$.ajax({
...
},
...
?
UPDATE. İlgili döngü:
var Grid = React.createClass({
propTypes: {
data: React.PropTypes.array.isRequired,
onCellChange: React.PropTypes.func.isRequired,
onRowCommit: React.PropTypes.func.isRequired
},
render: function() {
var rows = this.props.data.map(function(rowData, index) {
return <Row key={index} data={rowData} onCellChange={this.props.onCellChange.bind(null, index)} onRowCommit={this.props.onRowCommit.bind(null, index)} onRowDelete={this.props.onRowDelete.bind(null, index)} />;
}, this);
return (
<Table striped bordered hover responsive>
<thead>
<tr>
<th className="col-sm-4">Order Subtotal (up to)</th>
<th className="col-sm-2">Canada</th>
<th className="col-sm-2">US</th>
<th className="col-sm-2">International</th>
<th className="col-sm-1"></th>
</tr>
</thead>
<tbody>
{rows}
</tbody>
</Table>
);
}
});
Gösterilen kodun tamamına sahip olmadığınızdan, React'ın her neyi değiştirdiğini bilmesi için her 'tr' kelimesine özel' key' özniteliğini ekliyor musunuz? http://facebook.github.io/react/docs/multiple-components.html#dynamic-children – WiredPrairie
Evet. Ben örnek ekleyeceğim. Belirtildiği gibi satır ekleme ve düzenleme sorunu yoktur (anahtarı ayarlamadıysa durum böyle olmaz). – Ted
Belki de silmek yerine silinen satırı gizlemeliyim? Sadece okuduğum (referansın üzerinde olanın tam olarak ne olduğu ortaya çıkıyor) "Durumsal Çocuklar için Çoğu bileşen için bu büyük bir sorun değil. Ancak, bu geçişteki veriler boyunca bu verileri koruyan durum bilgisi bileşenleri için Çok sorunlu olabilir Çoğu durumda, bu onları yok etmek yerine öğeleri gizleyerek yanlara alınabilir " – Ted