我有一個小的執行拖放使用react-dnd
。有兩列,從右欄拖動到左欄激活特定的狀態項。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」。因爲它需要一個獨特的'索引'爲每個項目。 –
「Status」的'id'也是錯誤的。你可以嘗試像'status.title + status.type_id + i'這樣的東西。否則,你將需要一個工廠來爲你的狀態項目生成一個隨機ID,即一個函數返回這些項目中的一個,給它的類型添加一個ID。 – JulienD
已更新爲ID生成器。 – JulienD