検索

ホームページ  >  に質問  >  本文

ReactJS - カスタムフックリターン関数は内部状態の実際のデータを保存しない

通知ウィジェットのカスタム フックuseNotificationsがあります。このフックは、次の要素を含む配列を返します (ant.design メッセージ API に似ています):

ユーザーが add を呼び出すと、通知を削除するために使用できる ID が与えられます

この質問は特に削除機能に関するものです。新しい通知を追加した直後にこの関数を呼び出しているため、関数は古いリストのコピーを受け取るため、新しい要素はなく、エラーがスローされます。コンポーネントが同じ API を使用するように修正するにはどうすればよいですか?

useNotification フック 使用方法

Codesandbox (テストのために、setTimeout を実行すると、3 秒以内に remove() が呼び出されます): https://codesandbox.io/s/goofy-smoke -5q7dw3?ファイル=/src/App.js:405-440

P粉729436537P粉729436537448日前477

全員に返信(1)返信します

  • P粉478188786

    P粉4781887862023-09-13 00:58:59

    remove 関数で、最新のステータス値にアクセスできる ステータス アップデータ関数 を使用することができます。これにより、コンポーネントが remove() で再レンダリングされる前に、新しい list 状態にアクセスできるようになります。

    注: 現在、ネストされたオブジェクトの isMounted プロパティを false に設定することで、元の状態を変更しています。配列をコピーする場合でも、再レンダリングの問題を避けるために、更新されるオブジェクトもコピーする必要があります。

    ここでは、状態の最新の値にアクセスし、状態の突然変異を回避する方法に関するいくつかの変更を示します。 リーリー

    以下の例を参照してください:

    返事
    0
  • キャンセル返事