小道具掘削と理解はそれらを通して文脈を反応させる
4851 ワード
導入
いくつかのケースでは、それらを受け取っている要素がそれらを使用していない複数のコンポーネントにプロップを渡す場合は、あなたはプロップドリルです.あなたが3つのコンポーネントA、BとCを持っていて、あなたがProp
name
コンポーネントから<A name="Tony" />
に<B />
. しかし、コンポーネントBはname
プロップ単にコンポーネントに渡すC
実際にプロップを使用する場合.コンテキストAPIは、すべてのレベルを手動で小道具を渡す必要がなく、コンポーネントツリーを介してデータを渡すためのメカニズムを提供しました.
例から始めましょう
import { useState } from "react";
const App = () => {
const [input, setInput] = useState("");
const inputHandler = (e) => setInput(e.target.value);
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<label>Input </label>
<input value={input} onChange={inputHandler} />
</div>
);
};
ここでは、いくつかのテキストを入力できる簡単な入力ボックスがあります.
このコンポーネントをリファクタとして、状態とOnChangeハンドラーがアプリケーションコンポーネントからInputStyleという別のコンポーネントに渡されるようにします.
import { useState } from "react";
const InputStuff = ({ input, inputHandler }) => {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<label>Input </label>
<input value={input} onChange={inputHandler} />
</div>
);
};
const App = () => {
const [input, setInput] = useState("");
const inputHandler = (e) => setInput(e.target.value);
return <InputStuff input={input} inputHandler={inputHandler} />;
};
入力には、input
and inputHandler
ので、我々はいくつかの小道具を送信しています.もう一つの層を我々の構成木に加えるためにもう一度それを再評価しましょう.import { useState } from "react";
const InputLabel = () => {
return <label>Input </label>;
};
const InputDisplay = ({ input, inputHandler }) => {
return <input value={input} onChange={inputHandler} />;
};
const InputStuff = ({ input, inputHandler }) => {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<InputLabel />
<InputDisplay input={input} inputHandler={inputHandler} />
</div>
);
};
const App = () => {
const [input, setInput] = useState("");
const inputHandler = (e) => setInput(e.target.value);
return <InputStuff input={input} inputHandler={inputHandler} />;
};
上記のコードを示すCodesAndboxのURLhere Voilaこれは支柱掘削です.得る
input
状態とinputHandler
ハンドラは、適切な場所には、入力コンポーネントを介して小道具をドリルダウンする必要があります.入力コンポーネント自体は実際にこれらの小道具を機能させる必要はありませんが、子供たちがそれらを必要とするので、まだそれらを受け入れて、それらの小道具を転送しなければなりません.小柱掘削は両方の長所と短所を持っている.このような工夫された例では、多くの問題を抱えていませんが、いったん深い層を持ち、どこかの小道具を必要とすると、反応文脈APIを利用することができます.
ここでは、反応コンテキストAPIを使用して上記の例です
import React, { useState, useContext, createContext } from "react";
const InputContext = createContext();
const InputLabel = () => {
return <label>Input </label>;
};
const InputDisplay = () => {
const { input, inputHandler } = useContext(InputContext);
return <input value={input} onChange={inputHandler} />;
};
const InputStuff = ({ input, inputHandler }) => {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<InputLabel />
<InputDisplay input={input} inputHandler={inputHandler} />
</div>
);
};
const App = () => {
const [input, setInput] = useState("");
const inputHandler = (e) => setInput(e.target.value);
return (
<InputContext.Provider value={{ input, inputHandler }}>
<InputStuff input={input} inputHandler={inputHandler} />
</InputContext.Provider>
);
};
以下はコンテキストAPIを使用したCodesandBoxの例ですhere 結論
Theme
, Locale
アプリケーションの多くのコンポーネントに.Reference
この問題について(小道具掘削と理解はそれらを通して文脈を反応させる), 我々は、より多くの情報をここで見つけました https://dev.to/sushmeet/props-drilling-and-understand-react-context-2f8pテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol