[解決済み] Reactの子プロセスとして、Functionsは有効ではありません。レンダーからではなく、Componentを返した場合に発生する可能性があります。
2023-01-04 03:56:15
質問
高次コンポーネントを作成しました。
import React from 'react';
const NewHOC = (PassedComponent) => {
return class extends React.Component {
render(){
return (
<div>
<PassedComponent {...this.props}/>
</div>
)
}
}
}
export default NewHOC;
上記をApp.jsで使用しています。
import React from 'react';
import Movie from './movie/Movie';
import MyHOC from './hoc/MyHOC';
import NewHOC from './hoc/NewHOC';
export default class App extends React.Component {
render() {
return (
<div>
Hello From React!!
<NewHOC>
<Movie name="Blade Runner"></Movie>
</NewHOC>
</div>
);
}
}
しかし、出てくる警告は
警告です。関数はReactの子として有効ではありません。これは、以下の場合に発生します。 の代わりにComponentを返した場合、発生する可能性があります。または または、この関数を返すのではなく、呼び出すことを意図しています。 in NewHOC (アプリで作成) in div (作成者: App) in App
Movie.jsファイルは。
import React from "react";
export default class Movie extends React.Component{
render() {
return <div>
Hello from Movie {this.props.name}
{this.props.children}</div>
}
}
私は何を間違えているのでしょうか?
どうすればいいのでしょうか?
通常のコンポーネントとして使っているようですが、実はコンポーネントを返す関数なのです。
こんな感じにしてみてください。
const NewComponent = NewHOC(Movie)
そして、このように使うことになります。
<NewComponent someProp="someValue" />
以下は実行例です。
const NewHOC = (PassedComponent) => {
return class extends React.Component {
render() {
return (
<div>
<PassedComponent {...this.props} />
</div>
)
}
}
}
const Movie = ({name}) => <div>{name}</div>
const NewComponent = NewHOC(Movie);
function App() {
return (
<div>
<NewComponent name="Kill Bill" />
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"/>
ということで、基本的には
NewHOC
はコンポーネントを受け取り、渡されたコンポーネントをレンダリングする新しいコンポーネントを返すだけの関数です。 通常、このパターンはコンポーネントを強化し、ロジックやデータを共有するために使用されます。
で HOCS について読むことができます。 docs を読むことをお勧めしますし、また リアクトの要素とコンポーネントの違い
私は 記事 にて、reactでロジックを共有する様々な方法とパターンを紹介しました。
関連
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] javascriptで2つの数値を連結する方法は?
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] Node.jsのES6クラスをrequireで作る