別の親コンポーネントであるコンポーネントを作成します:Container
は親とContainer.Data
子です。このようにして、コンポーネントに構造を追加できます。
const Container = ({ children }) => {
return (
<div>
<h1>Container</h1>
{children}
</div>
);
};
const Data = ({ children }) => {
return <div>{children}</div>;
};
Container.Data = Data;
export { Container };
///
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<Container>
<Container.Data>item1</Container.Data>
<Container.Data>item2</Container.Data>
</Container>
<Container.Data>item3</Container.Data>
</div>
次の問題は次のとおり<Container.Data>item3</Container.Data>
です。コンポーネントの外部にあり、機能しますが<Container.Data>item3</Container.Data>
、親の外部を追加する場合Container
は、エラーが発生します。したがって、すべてのアイテムは内部にのみ存在する必要がありContainer
ます。
質問:これを行う方法は?
デモ:https://codesandbox.io/s/stupefied-dubinsky-6lh8v?file = / src / Container.js:27-264
React Contextを使用して、Data
「チェックイン」するコンポーネントのコンテキストを作成します。提供するdefaultValue
プロバイダによって「本当」の値によって上書きされるコンテキストに。コンテキストにサブスクライブされたコンポーネントのツリーで、その上に一致するプロバイダーがない場合、このデフォルト値が使用されます。
import React from "react";
const ContainerContext = React.createContext("containerless");
const Container = ({ children }) => {
return (
<ContainerContext.Provider value="Container">
<div>
<h1>Container</h1>
{children}
</div>
</ContainerContext.Provider>
);
};
const Data = ({ children }) => {
const containerContext = React.useContext(ContainerContext);
React.useEffect(() => {
if (containerContext === "containerless") {
throw new Error("Data Container not contained in Container component");
}
});
return <div>{children}</div>;
};
Container.Data = Data;
export { Container };
アプリ
「item3」データコンテナを出し入れしContainer
てテストします。
function App() {
return (
<div className="App">
<Container>
<Container.Data>item1</Container.Data>
<Container.Data>item2</Container.Data>
</Container>
<Container.Data>item3</Container.Data>
</div>
);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加