react-dnd
을 사용하여 드래그 앤 드롭을 약간 구현했습니다. 오른쪽 열에서 왼쪽 열을 드래그하면 특정 상태 항목이 활성화됩니다.React.js - 프런트 엔드에서 배열을 업데이트하지 않는 Array.unshift()
드롭하면 pushCard()
이 호출되며, 이는 (이름에서 알 수 있듯이) 드래그 한 항목을 활성화 된 상태 배열 인 status_data
으로 푸시합니다.
그러나 문제는 status_data.push(itemToPush)
이며 배열의 끝에 새 항목을 푸시합니다. 배열의 맨 위에 항목을 푸시 (즉, 배열의 인덱스 0)하고 싶습니다.
status_data.unshift(itemToPush)
이 경우 작동하지만 unshift
만 state
와 백엔드에 배열을 업데이트하지만, 프런트 엔드에 업데이트 된 array
표시되지 않습니다. 그보다 먼저 드래그 한 것과 동일한 요소를 계속 밀어내는 것입니다.
pushCard
Simple description of problem in a GIF.
: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