[解決済み] React JSXにおける...restの意味とは?
質問
React Router Dom v4 のサンプルを見てみましょう。 https://reacttraining.com/react-router/web/example/auth-workflow なるほど プライベートルート コンポーネントは、以下のようにレストプロップを再構築します。
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
fakeAuth.isAuthenticated ? (
<Component {...props}/>
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)}/>
)
を確かめたい。
{ component: Component, ...rest }
を意味します。
から
props
を使用して、Component プロップを取得し、他のすべてのプロップはあなたに与えられている、そして名前を変更します。props
からrest
に渡されるプロップの命名問題を回避できるようになります。render
機能
そうだろうか?
どのように解決するのですか?
申し訳ありませんが、私の最初の回答は(できればまだ有用な/追加の文脈を提供したいところですが)あなたの質問に答えていないことに気づきました。もう一度お願いします。
という質問ですね。
確かめたいのは
{ component: Component, ...rest }
を意味します。から
props
を取得します。Component
プロップ、そして他のすべてのprops
与えられた という名前に変更しprops
をrest
での命名問題を回避できるようになります。props
に渡されるRouterender
機能
あなたの解釈はちょっと違う。しかし、あなたの考えからすると、少なくともここで起こっていることが、ある種の オブジェクトの再構築 (さらに明確にするために、2番目の回答とそこでのコメントを参照してください)。
正確な解説をするために、「1」の部分を分解してみましょう。
{ component: Component, ...rest }
式は、2つの別々の操作に分かれています。
-
操作1:
を検索します。
component
プロパティが定義されています。props
( ノート : 小文字 c コンポーネント) を作成し、それを新しい場所に割り当てます。Component
( ノート 資本金 C omponent)です。 -
操作 2.
次に、すべての
残り
で定義されたプロパティは
props
という引数の中に集められます。rest
.
重要な点は、名前を変更していないことです。
props
から
rest
. (との命名問題を避けようとすることとも関係ありません)。
props
に渡されるRoute
render
関数を使用します)。
rest === props;
// => false
単に引いているだけ
その他
に定義されているプロパティのうち、1つだけを指定することができます (そのため、この引数はそのように名付けられています)。
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);
// => John Doe
console.log(rest);
// => { age: 35, sex: 'M', dob: Mon Jan 01 1990 00:00:00 GMT-0800 (PST) }
サイドノート
と疑問に思うかもしれません。をわざわざ引くのはなぜ?
component
プロパティ という名前に変更するだけでComponent
を大文字の"C"で書くと?
ええ、かなり些細なことのようです。そして、これはReactの標準的なプラクティスですが、すべての
Facebookのドキュメント
のように書かれています。つまり、JSXでレンダリングされたカスタムコンポーネントを大文字にすることは、それ自体が習慣というよりも、必要なことなのです。React、いや、もっと正しくは
JSXは大文字と小文字を区別する
. 最初の文字が大文字でない状態で挿入されたカスタムコンポーネントは、DOMにレンダリングされません。これは、Reactがカスタムコンポーネントを識別するために定義した方法に過ぎません。したがって、もしこの例でさらに
component
プロパティから引き抜かれた
props
から
Component
は、その
<component {...props} />
式は正しくレンダリングされない。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] javascript:void(0)」とは何ですか?
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】リソースはドキュメントと解釈されるが、MIMEタイプはapplication/zipで転送される
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】WebSocket接続に失敗しました。WebSocket のハンドシェイク中にエラーが発生しました。予期しない応答コードです。400
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み] React Router 4で認証されたルートを実装するには?