エンティティ レコードのやり直し機能でステータスが正しく設定されない
P粉029057928
P粉029057928 2023-09-15 19:27:41
0
1
805

エンティティ レコードを使用してマインド マッピング アプリケーションを構築しています。 アプリケーション内のデータはノードのツリーであり、元に戻す/やり直しによってノードの親を再設定できるようにしたいと考えています。 私が直面している問題は、元に戻す操作は正常に機能しても、やり直し操作が機能しないことです。

単純なアプリケーションで問題を再現しました:

リーリー

「3 の親を変更」ボタンをクリックすると、State 関数が変更されます:

  1. ノード 3 を親 (ノード 0) の子リストから削除します
  2. ノード 3 を新しい親ノード (ノード 2) の子ノード リストに追加します
  3. ノード 3 の親ノードを 2 にリセットします

REDO により、状態が初期値に正しく復元され、列 1、2、3 は 0 の子になります。

しかし、Redo は、ノード 0 の子ノード リストを 1、2 に設定する必要があるのに、3 に設定します。 非常に不思議なことに、ノード 0 の Children プロパティに直接関係しないノード 3 の Parentis プロパティを設定しないと、このようなことは起こりません...

これは参照と値の型の問題、あるいはエンティティ レコードのバグではないかと思われます... 何か助けはありますか?

P粉029057928
P粉029057928

全員に返信(1)
P粉729518806

思った通り、この質問は参考質問です... 最初の操作を実行するときは、「検索」関数 n => n.id === node.parentid を使用して、配列の正しい要素を選択します。 ただし、solid-record がコマンド履歴を保存する方法では、「ノード」オブジェクトのみが保存されます。 そして、同じオブジェクトのparentidプロパティが最後の操作によって変更されます。 この問題は、node.parentid を格納するローカル変数を使用することで解決されました。

または、SolidJS ストア API ドキュメントをよく読んだ後、検索関数の代わりに ID を直接使用します。例:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート