機能をリクエストしバグを報告しますか?
バグ。
現在の動作は何ですか?
React.useCallback
は、コンポーネントがサーバー側でレンダリングされるときにundefined
React.useCallback
返します。
現在の動作がバグである場合は、再現する手順と、可能であれば問題の最小限のデモを提供してください。 以下のJSFiddle(https://jsfiddle.net/Luktwrdm/)またはCodeSandbox(https://codesandbox.io/s/new)の例へのリンクを貼り付けます。
このバグは、 useCallback
を使用してReactコンポーネントを作成することで再現できます。 サーバーに戻り値を記録すると、ブラウザーで関数が正しく返される一方で、 undefined
が生成されます。
あなたはこのCodeSandboxでこのバグを観察することができます。 https://codesandbox.io/s/r557kww6wnの戻り値というアプリケーションが正しくコンソールを見て、文字列のバグがレンダリングされ、次のように表示されますuseCallback
あるundefined
。
これはまったく同じアプリケーションですが、クライアントでレンダリングされます: https://codesandbox.io/s/xvwv797pxz関数はコンソールに正しく記録されます。
期待される動作は何ですか?
React.useCallback
は、 undefined
ではなく、メモ化されたコールバックを返す必要があります。
Reactのどのバージョン、およびどのブラウザ/ OSがこの問題の影響を受けますか?
コールバックはサーバー環境では実行されません。
コールバックはonClick
などのイベントハンドラーで使用するためのものであり、SSR中には意味がないため、Reactはそれらを追跡する必要がなく、使用されるリソースを解放することが理論的根拠だと思います。決して使用されないフックを追跡することによって不必要に。
水分補給するとき、コールバックがそこにあるので、心配しないでください。
しかし、私はあなたが正確に何をしようとしているのか尋ねてもいいですか?
ありがとう@ arianon👌私は、useMappedStateでuseCallback
を使用するというredux-react-hookの提案に従っていました。 概念的には、私がメモしている関数は実際にはコールバックではありません。 この用語はさまざまな文脈で使用される傾向があるため、最初は注意を払いませんでした。 また、ドキュメントには次のように記載されています。
useCallback(fn, inputs)
はuseMemo(() => fn, inputs)
と同等です。
docsリポジトリで問題を開いて、更新を提案します😉ありがとうございます!
これはバグだと思います。 そのコードコメントは間違っています。 私の理解では、レンダリングフェーズのコールバックにuseCallbackを使用するのは正しいことです。
AFAICTサーバー側で実行してはならないのは、Effectsとref属性の初期化だけです。 動作するuseCallbackは、たとえば、レンダリングプロップHOCパターンにとって重要です。これは、長い間エコシステムに存在し続けます。
最も参考になるコメント
これはバグだと思います。 そのコードコメントは間違っています。 私の理解では、レンダリングフェーズのコールバックにuseCallbackを使用するのは正しいことです。