[解決済み] reactのコンポーネントをpropsとして渡す
質問
例えば、こんな感じです。
import Statement from './Statement';
import SchoolDetails from './SchoolDetails';
import AuthorizedStaff from './AuthorizedStaff';
const MultiTab = () => (
<Tabs initialIndex={1} justify="start" className="tablisty">
<Tab title="First Title" className="home">
<Statement />
</Tab>
<Tab title="Second Title" className="check">
<SchoolDetails />
</Tab>
<Tab title="Third Title" className="staff">
<AuthorizedStaff />
</Tab>
</Tabs>
);
Tabsコンポーネントの内部です。
this.props
はプロパティを持ちます。
+Children[3]
className="tablist"
justify="start"
Children[0] (this.props.children) は次のようになります。
$$typeof:
Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:Object
_source:null
_store:Object
key:null
props:Object
ref:null
type: Tab(props, context)
__proto__
Object
Children[0].propsは以下のようになります。
+Children (one element)
className="home"
title="first title"
最後に、Childrenオブジェクトは次のようになります(これが私が渡したいものです)。
$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null
問題は、MultiTabをこのように書き換えた場合です。
<Tabs initialIndex={1} justify="start" className="tablisty">
<Tab title="First Title" className="home" pass={Statement} />
<Tab title="Second Title" className="check" pass={SchoolDetails} />
<Tab title="Third Title" className="staff" pass={AuthorizedStaff} />
</Tabs>;
Tabsコンポーネントの内部
this.props.children
は、上記と同じように見えます。
children[0].props
のように見えます。
classname:"home"
**pass: function Statement()**
title: "First title"
が欲しい。
pass
プロパティは次のようになります。上記はStatement関数をプリントアウトしているだけです。
$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null
これは奇妙な質問ですが、長い話私はライブラリを使っていて、これはそれに起因するものです。
どのように解決するのですか?
使用方法
this.props.children
は、インスタンス化されたコンポーネントをリアクトコンポーネントに渡すためのイディオム的な方法です。
const Label = props => <span>{props.children}</span>
const Tab = props => <div>{props.children}</div>
const Page = () => <Tab><Label>Foo</Label></Tab>
コンポーネントを直接パラメータとして渡す場合、インスタンス化されていない状態で渡し、propsから取得することでインスタンス化します。これは、ツリー下のコンポーネントによってインスタンス化されるコンポーネントクラスを渡す慣用的な方法です(例えば、コンポーネントがタグにカスタムスタイルを使用していて、消費者がそのタグが
div
または
span
):
const Label = props => <span>{props.children}</span>
const Button = props => {
const Inner = props.inner; // Note: variable name _must_ start with a capital letter
return <button><Inner>Foo</Inner></button>
}
const Page = () => <Button inner={Label}/>
やりたいことがpropとしてchildrenのようなパラメータを渡すことであれば、それは可能です。
const Label = props => <span>{props.content}</span>
const Tab = props => <div>{props.content}</div>
const Page = () => <Tab content={<Label content='Foo' />} />
結局のところ、Reactのプロパティは通常のJavaScriptオブジェクトプロパティであり、文字列、関数、複雑なオブジェクトなど、どんな値でも保持することができるのです。
関連
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React jsのonClickはメソッドに値を渡すことができない
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] Reactのstateとpropsの違いとは?
-
[解決済み] react-router - ハンドラコンポーネントにpropsを渡す
-
[解決済み】 {this.props.children} に props を渡すには?}
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueディレクティブv-bindの使用と注意点
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
[解決済み】あるリアクトコンポーネントを別のリアクトコンポーネントに渡して、最初のコンポーネントの内容をトランスクルードする方法は?