useMemoほぼuseCallbackと同じ役割です。参照を返すような値をいくつも作らないようにする為に使います。useMemoには1つ目の引数に好きな値、2つ目にはuseCallbackなどと同じ用に条件を渡します。この条件がセットで同じ値の時は前回返した値を返します。3}というオブジェクトを返します。3}をそのまま返します。違う条件のセットであれば新しいオブジェクトを作って返します。依存無しの値もし値が外部のどんな変数にも依存してない場合、明らかに生成が必要な値は1つになります。明らかに1つの時は条件に空配列を置きます。依存無しなのにわざわざuseMemoを使う必要があるのかとも思うかもしれません。なければ、子コンポーネントに渡すときに違う参照の値を渡すことになり、子コンポーネントから見れば毎回違うセットのpropsが渡ってくるように見える為です。