[解決済み] React.cloneElementとthis.props.childrenはいつ使い分ければいいのでしょうか?
質問
私はまだReactの初心者ですが、インターネット上の多くの例で、子要素のレンダリングにこのようなバリエーションがあるのを見かけ、困惑しています。通常、私はこれを見ます。
class Users extends React.Component {
render() {
return (
<div>
<h2>Users</h2>
{this.props.children}
</div>
)
}
}
でも、こんな例もあるんですね。
<ReactCSSTransitionGroup
component="div"
transitionName="example"
transitionEnterTimeout={500}
transitionLeaveTimeout={500}
>
{React.cloneElement(this.props.children, {
key: this.props.location.pathname
})}
</ReactCSSTransitionGroup>
これでapiは理解できたが ドキュメント は、どのような場合に使用すべきなのかが明確ではありません。
では、一方にできて他方にできないことは何でしょうか?どなたか、もっと良い例で説明していただけませんか?
解決方法は?
props.children
は実際の子どもたちではありません。
記述子
の子です。つまり、実際には何も変更することはできません。プロップを変更したり、機能を編集したりすることはできません。
読み取る
. もし、何らかの変更を加える必要がある場合は
新要素
を使って
React.CloneElement
.
一例です。
などのコンポーネントのメインレンダリング機能
App.js
:
render() {
return(
<Paragraph>
<Sentence>First</Sentence>
<Sentence>Second</Sentence>
<Sentence>Third</Sentence>
</Paragraph>
)
}
を追加する必要があるとします。
onClick
の各子孫に
Paragraph
というように
Paragraph.js
ということができます。
render() {
return (
<div>
{React.Children.map(this.props.children, child => {
return React.cloneElement(child, {
onClick: this.props.onClick })
})}
</div>
)
}
であれば、単純にこうすればいいのです。
render() {
return(
<Paragraph onClick={this.onClick}>
<Sentence>First</Sentence>
<Sentence>Second</Sentence>
<Sentence>Third</Sentence>
</Paragraph>
)
}
注
その
React.Children.map
関数は
トップレベル
つまり、子要素に直接プロップスを与えるということです (ここでは
<Sentence />
要素)を使用します。プロップをさらに下に渡す必要がある場合、たとえば
<div></div>
の1つの内部で
<Sentence />
を使いたい要素は
onClick
プロパティを使用する場合、Context API を使用してそれを行うことができます。を作成します。
Paragraph
プロバイダと
Sentence
要素を消費者とします。
関連
-
[解決済み】React - 式は1つの親要素を持つ必要がありますか?
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み】<Image>と<TouchableHighlight>を<View>に入れると「React.Children.only expected to receive a single React element child」エラーが発生する。
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] nextjsで異なる.envファイルを使用するには?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] ReactJsです。this.props.childrenのPropTypesはどうすればいいのでしょうか?
-
[解決済み】 {this.props.children} に props を渡すには?}
-
[解決済み] this.props.children}とは何ですか、またどのような場合に使用するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Reactでclsxを使用する方法
-
[解決済み] reactでonloadを使うには?
-
[解決済み] sh: react-scripts: npm start の実行後にコマンドが見つからない。
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] nginxでcertbotを使用する際の問題点
-
[解決済み] ReactコンポーネントのJest SnapshotテストにおけるSnapshotテストの仕組みとtoMatchSnapshot()関数は何をするのか?
-
[解決済み] react-navigation v5を使ったreact-nativeアプリのAppNavigatorの構文を更新する。
-
[解決済み] AxiosにCORSの問題が発生
-
[解決済み] Reactでグローバル変数を宣言する方法とは?
-
[解決済み] ESLintとTSLintの違い【クローズド】について