申し訳ありませんが、私の最初の答えは(うまくいけばまだ有用な/追加のコンテキストを提供している間)あなたの質問に答えないことに気づきました。もう一度やり直します。
あなたが尋ねる:
私はそれが{ component: Component, ...rest }
意味することを確信したい:
からprops
、Component
小道具を取得してから、他のすべてを取得し、props
名前props
をに変更して、Route関数に渡されるrest
名前の問題を回避できるようにし
ます。props
render
あなたの解釈は完全に正しくありません。しかし、あなたの考えに基づくと、ここで起こっていることはある種のオブジェクトの破壊に相当するという事実を少なくとも知っているようです(詳細については、2番目の回答とコメントを参照してください)。
正確に説明するために、{ component: Component, ...rest }
式を2つの別々の操作に分解してみましょう。
- 操作1:検索
component
で定義されたプロパティprops
(注:小文字のC creationCompleteコンポーネント)を、我々は呼ん状態で新しい場所に割り当てComponent
(注:資本CのcreationCompleteコンポーネント)。
- 操作2:次に、オブジェクトに定義されている残りのすべてのプロパティを取得し、
props
と呼ばれる引数内に収集しますrest
。
重要な点は、名前props
をに変更しないことですrest
。(また、「props
Routerender
関数に渡される名前の問題を回避する」こととは関係ありません。)
rest === props;
オブジェクトで定義されたプロパティの残りの部分(したがって、引数の名前がそのようになっている理由)を、props
と呼ばれる新しい引数に単純にプルしますrest
。
使用例
これが例です。次のように定義されたオブジェクト `myObj`があると仮定します。
const myObj = {
name: 'John Doe',
age: 35,
sex: 'M',
dob: new Date(1990, 1, 1)
};
この例では、に示さprops
れているのと同じ構造(つまり、プロパティと値)を持っていると考えると役立つ場合がありますmyObj
。それでは、次の代入を書いてみましょう。
const { name: Username, ...rest } = myObj
上記のステートメントは、2つの変数(または、おそらく定数)の宣言と代入の両方に相当します。このステートメントは、次のように考えることができます。
でname
定義されたプロパティをmyObj
取得し、その値を新しい変数に割り当てますUsername
。その後、テイクは、他のどんなプロパティに定義されたmyObj
(すなわち、age
、sex
およびdob
)、変数我々の名に割り当てられた新しいオブジェクトにそれらを集めますrest
。
ロギングUsername
とrest
にこれconsole
を確認します。次のものがあります。
console.log(Username);
console.log(rest);
サイドノート
あなたは不思議に思うかもしれません:
component
プロパティの名前をComponent
大文字の「C」に変更するだけで、プロパティを削除するという問題が発生するのはなぜですか。
ええ、それはかなり些細なようです。そして、それは標準的なReactの慣習ですが、そのフレームワークに関するFacebookのすべてのドキュメントがそのように書かれているのには理由があります。つまり、JSXでレンダリングされたカスタムコンポーネントを活用すること自体は、必要以上に実践的ではありません。React、より適切には、JSXでは大文字と小文字が区別されます。大文字の最初の文字なしで挿入されたカスタムコンポーネントは、DOMにレンダリングされません。これは、Reactがカスタムコンポーネントを識別するためにそれ自体を定義した方法です。したがって、プルオフされたcomponent
プロパティの名前を追加で変更しなかっprops
たComponent
場合、<component {...props} />
式は正しくレンダリングされませんでした。