エンティティ レコードを使用してマインド マッピング アプリケーションを構築しています。 アプリケーション内のデータはノードのツリーであり、元に戻す/やり直しによってノードの親を再設定できるようにしたいと考えています。 私が直面している問題は、元に戻す操作は正常に機能しても、やり直し操作が機能しないことです。
単純なアプリケーションで問題を再現しました:
リーリー「3 の親を変更」ボタンをクリックすると、State 関数が変更されます:
REDO により、状態が初期値に正しく復元され、列 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 を直接使用します。例:
リーリー