엔터티 레코드를 사용하여 마인드 매핑 애플리케이션을 구축하고 있습니다. 애플리케이션의 데이터는 노드 트리이며 실행 취소/다시 실행을 통해 노드의 부모를 다시 지정할 수 있기를 원합니다. 내가 직면한 문제는 실행 취소 작업이 제대로 작동하더라도 다시 실행 작업이 제대로 작동하지 않는다는 것입니다.
간단한 앱에서 내 문제를 재현했습니다.
으아악"3의 부모 변경" 버튼을 클릭하면 ChangeState 기능이 다음과 같이 실행됩니다.
재작업은 상태를 초기 값으로 올바르게 복원하며 열 1,2,3은 0의 하위 항목입니다.
하지만 Redo는 노드 0의 하위 노드 목록을 1,2로 설정해야 하는데 3으로 설정합니다! 아주 이상하게도 노드 0의 Children 속성과 직접적인 관련이 없는 노드 3의 Parentis 속성을 설정하지 않으면 이런 일이 발생하지 않습니다...
이것은 참조 유형과 값 유형 문제이거나 엔터티 레코드의 버그일 수도 있습니다... 도움이 필요하세요?
제가 예상한 대로 질문은 참고 질문입니다... 첫 번째 작업을 수행할 때 "검색" 기능 n => n.id === node.parentid를 사용하여 배열의 올바른 요소를 선택합니다. 그러나 Solid-Record가 명령 기록을 저장하는 방식은 "노드" 개체만 저장하는 방식입니다. 그리고 동일한 개체의 parentid 속성은 마지막 작업에 의해 수정됩니다. node.parentid를 저장하는 로컬 변수를 사용하여 문제가 해결되었습니다.
또는 SolidJS 스토어 API 문서를 자세히 읽은 후 다음과 같이 검색 기능 대신 직접 ID를 사용하세요.
으아악