react-dnd
を使用してドラッグアンドドロップの小さな実装があります。 2つの列があり、右側の列から左側にドラッグすると、特定のステータス項目がアクティブになります。React.js - フロントエンドでArray.unshift()の配列を更新しない
ドロップ時に、pushCard()
が呼び出されます(名前が示唆するように)、ドラッグされた項目を有効化されたステータスの配列、つまりstatus_data
にプッシュします。
しかし、問題はstatus_data.push(itemToPush)
で、配列の最後に新しい項目をプッシュします。私は、配列の上にアイテムをプッシュする、つまり配列のインデックス0を挿入したかったのです。この場合
status_data.unshift(itemToPush)
作品が、unshift
はstate
にし、バックエンドでの配列を更新しますが、それはフロントエンドに更新array
が表示されません。むしろ最初にドラッグされたのと同じ要素を押し続けるだけです。
Simple description of problem in a GIF.
pushCard
:
pushCard(item) {
const { status_data } = this.state.template;
const itemToPush = {
title : item.title || 'CUSTOM',
type_id : item.type_id,
color : item.color || '#000',
type: item.type,
require_notes: item.require_notes || false,
require_estimate: item.require_estimate || false
};
status_data.unshift(itemToPush);
this.setState(Object.assign(this.state.template, { status_data }));
}
renderActiveStatuses
renderActiveStatuses() {
let renderedResult = '';
if (this.state.template.status_data.length < 0) {
renderedResult = (<p>No status active in this template.</p>);
} else {
renderedResult = this.state.template.status_data.map((status, i) => {
return (
<Status deleteStatus={this.deleteStatus} handleStatusUpdate={this.onStatusUpdate} index={i} id={status.id} moveCard={this.moveCard} statusData={status} key={status.id} />
);
});
}
return renderedResult;
}
renderActiveStatuses
成分のrender
関数で呼び出されます。
'key = {i}'を実行すると、 'react-dnd'が混乱します。各項目に固有の 'index'が必要です。 –
'Status'の' id'も間違っています。 'status.title + status.type_id + i'のようなものを試すことができます。さもなければ、それらのためのランダムなIDを生成するあなたの状態項目のためのファクトリ、すなわちその型に与えられたこれらの項目の1つを返し、オブジェクトにIDを追加する関数が必要になります。 – JulienD
IDジェネレータで更新されました。 – JulienD