フック+コンテキストを使用してください
14719 ワード
Reduxは必要なコードの過剰量を使用してコードベースに複雑さの多くを紹介します.これは、反応アプリケーションでの状態管理の不完全なソリューションになります.
私は、状態管理のための反応文脈APIを導入して、あなたがReduxより良い解決を文脈APIに加えていることを示します.
反応文脈API
コンテキストは、すべてのレベルで手動で小道具を渡すことなく、コンポーネントツリーを介してデータを渡す方法を提供します.
反応文脈APIは、直接接続されない複数の構成要素の状態を管理する反応の方法です.
コンテキストを作成するには、
The
何
我々が結合するとき、何が起こるかについて見ましょう
私たちは店でグローバルな状態を作ります.jsファイル
覚えておいてください
我々の状態を操作する必要があるとき、我々は
我々の中で
世界的に我々の州にアクセスすること
グローバルに我々の状態にアクセスするために、我々は我々のルートをラップする必要があります
我々は、我々が我々の世界的な州にアクセスする方法を見ました.
我々の州からデータを加えて、削除するために、我々は
Reduxは反応アプリケーションでの状態管理のために動作し、いくつかの利点がありますが、その冗長性はそれが本当にピックアップすることは困難になり、余分なコードのトンは、我々のアプリケーションでの作業を取得するために必要な不要な複雑さの多くを紹介します.
一方で
私は、状態管理のための反応文脈APIを導入して、あなたがReduxより良い解決を文脈APIに加えていることを示します.
反応文脈API
コンテキストは、すべてのレベルで手動で小道具を渡すことなく、コンポーネントツリーを介してデータを渡す方法を提供します.
反応文脈APIは、直接接続されない複数の構成要素の状態を管理する反応の方法です.
コンテキストを作成するには、
createContext
を返します.import React from 'react';
const newContext = React.createContext({ color: 'black' });
The createContext
メソッドは、プロバイダーとコンシューマーコンポーネントを持つオブジェクトを返します.const { Provider, Consumer } = newContext;
The Provider
コンポーネントは、どれだけ深く入れ子になっても、すべての子要素に対して状態を利用できるようにします.The Provider
コンポーネントは値propを受け取ります.これは現在の値を渡す場所です.<Provider value={color: 'blue'}>
{children}
</Provider>
The Consumer
, 名前が示すように、Provider
支柱掘削(threading)の必要なしで<Consumer>
{value => <span>{value}</span>}}
</Consumer>
フックがなければ、コンテキストAPIはreduxと比較したときにあまり見かけないかもしれませんが、useReducer
フック、我々は最終的に国家管理問題を解決する解決策を持っています.The
useReducer
フック何
useReducer
フックは反応16.8で来ました.JavaScriptのreduce ()メソッドと同じようにuseReducer
フックは引数として2つの値をとります-還元関数と初期状態-そして新しい状態を返します.const [state, dispatch] = useReducer((state, action) => {
const { type } = action;
switch(action) {
case 'action description':
const newState = // do something with the action
return newState;
default:
throw new Error()
}
}, []);
上記のブロックでは、状態と対応するメソッドを定義しました.dispatch
, 取り扱い.我々が呼ぶときdispatch
メソッドuseReducer()
フックは、type
このメソッドはaction引数で受け取ります:...
return (
<button onClick={() =>
dispatch({ type: 'action type'})}>
</button>
)
The useReducer
フックプラスコンテキストAPI我々が結合するとき、何が起こるかについて見ましょう
useReducer
with Context API
ために我々のアプリケーションの理想的なグローバル状態管理ソリューションを取得します.私たちは店でグローバルな状態を作ります.jsファイル
// store.js
import React, {createContext, useReducer} from 'react';
const initialState = {};
const store = createContext(initialState);
const { Provider } = store;
const StateProvider = ( { children } ) => {
const [state, dispatch] = useReducer((state, action) => {
switch(action.type) {
case 'action description':
const newState = // do something with the action
return newState;
default:
throw new Error();
};
}, initialState);
return <Provider value={{ state, dispatch }}>{children}</Provider>;
};
export { store, StateProvider }
我々の店で.JSファイルはcreateContext()
以前に説明した反応からメソッドを作成し、新しいコンテキストを作成します.覚えておいてください
createContext()
メソッドは、Provider
and Consumer
コンポーネント.今回は、私たちはProvider
コンポーネントとしてuseContext
フックが我々の状態にアクセスする必要があるとき.我々の状態を操作する必要があるとき、我々は
dispatch
所望のオブジェクトのメソッドとパスtype
引数として.我々の中で
StateProvider
, 帰りましたProvider
値を持つ成分prop
、そしてdispatch
からuseReducer
フック.世界的に我々の州にアクセスすること
グローバルに我々の状態にアクセスするために、我々は我々のルートをラップする必要があります
<App/>
コンポーネントStoreProvider
それをレンダリングする前にReactDOM.render()
機能// root index.js file
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { StateProvider } from './store.js';
const app = (
<StateProvider>
<App />
</StateProvider>
);
ReactDOM.render(app, document.getElementById('root'));
さて、我々store
コンポーネントツリー内の任意のコンポーネントからコンテキストをアクセスできます.これを行うには、useContext
フックreact
とstore
我々からストア.jsファイル// exampleComponent.js
import React, { useContext } from 'react';
import { store } from './store.js';
const ExampleComponent = () => {
const globalState = useContext(store);
console.log(globalState); // this will return { color: red }
};
状態からのデータの追加と削除我々は、我々が我々の世界的な州にアクセスする方法を見ました.
我々の州からデータを加えて、削除するために、我々は
dispatch
方法からstore
コンテキスト.我々は、コールする必要がありますdispatch
メソッドと型を持つオブジェクトを渡すaction
私たちの定義StateProvider
パラメータ)// exampleComponent.js
import React, { useContext } from 'react';
import { store } from './store.js';
const ExampleComponent = () => {
const globalState = useContext(store);
const { dispatch } = globalState;
dispatch({ type: 'action description' })
};
結論Reduxは反応アプリケーションでの状態管理のために動作し、いくつかの利点がありますが、その冗長性はそれが本当にピックアップすることは困難になり、余分なコードのトンは、我々のアプリケーションでの作業を取得するために必要な不要な複雑さの多くを紹介します.
一方で
useContext
APIと反応フックは、外部ライブラリをインストールしたり、ファイルやフォルダの束を追加する必要はありません我々のアプリの作業を得るために.これは、反応アプリケーションでのグローバルな状態管理を処理するためにはるかに簡単、より簡単な方法になります.Reference
この問題について(フック+コンテキストを使用してください), 我々は、より多くの情報をここで見つけました https://dev.to/smileyshivam/use-hooks-context-not-react-redux-35bgテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol