react Hook sにおける状態管理が新たな構想を実現する.
2829 ワード
TeleState特性
1、ヤフオクアプリの状態共有.
2、コンポーネントの外で、dispatchでstateを変更することができます.
3、プロviderは必要なく、コンポーネントがプロviderの作用領域にあるかどうかを考慮しなくてもいいです.
4、体積は4 kだけです
5、typescript friendly.
欠点
classコンポーネントはしばらくサポートされていませんが、自分で関数式コンポーネントを使って高次的にサポートする必要があります.
部分的な状態を共有できませんでした.menuコンポーネントmenu-intemがmenuを共有している状態のように、複数のmenuのインスタンスの状態が異なるため、context+providerスキームのみが使用される.
原理を実現する
set State queueで状態を配信します.
インストール
src/moduleA/store.ts
src/moduleA/component Test.tsx
src/store.ts
現在主流方案との対比
hooks+context
基本原理はstateとdispatchをcontextのProviderに保存し、use Contect appiを利用してproviderの中のstateとdispatchを取得することです.その上のパッケージはease-peasyなどがあります.
mobx
当初はmobxのapiデザインが対象に向けられていましたが、多くのデコレーションモードが使われています.今、Hook sは関数のコンポーネントを抱擁させます.いささかばつが悪いように見える.ここでも過大評価はしません.
redux
利点:reduxはデータフローを規範化している.短所:状態管理を集中的に管理して、怠惰な負荷に不利です.
1、ヤフオクアプリの状態共有.
2、コンポーネントの外で、dispatchでstateを変更することができます.
3、プロviderは必要なく、コンポーネントがプロviderの作用領域にあるかどうかを考慮しなくてもいいです.
4、体積は4 kだけです
5、typescript friendly.
欠点
classコンポーネントはしばらくサポートされていませんが、自分で関数式コンポーネントを使って高次的にサポートする必要があります.
部分的な状態を共有できませんでした.menuコンポーネントmenu-intemがmenuを共有している状態のように、複数のmenuのインスタンスの状態が異なるため、context+providerスキームのみが使用される.
原理を実現する
set State queueで状態を配信します.
インストール
npm i tele-state
第一ステップは、状態連動のhooks「useTeleState」を作成します.src/moduleA/store.ts
import React, { useEffect } from 'react'
import { createTeleState } from 'tele-state'
const { useTeleState } = createTeleState(1)
export {
useTeleState
}
Step 2-コンポーネントでこのhooksを使用して、apiはuseStateと似ています.src/moduleA/component Test.tsx
import {useTeleState} from './store'
function ComponentA(){
const [ count ] = useTeleState()
console.log('B----------', count)
return <>{count}>
}
function ComponentB(){
const [ count, setCount ] = useTeleState()
console.log('A----------', count)
useEffect( () =>{
setCount(count+1) // ComponentA will update too.
}, [] )
return
}
コンポーネント外読み/状態変更src/store.ts
const {
useTeleState,
dispatch, // , , .
getState, //
} = createTeleState(1)
export const addCount = () => {
// , , .
dispatch( preCount => preCount+1 )
// .
const count = getState()
fetch(`/api/bean?count=${count}`)
}
export {
useTeleState
}
実際のプロジェクトでは、複数のteleStateを作成し、各teleStateは、それぞれの業務/機能モジュールの下で状態を宣言します.後はプロジェクトを分割する時も、簡単です.現在主流方案との対比
hooks+context
基本原理はstateとdispatchをcontextのProviderに保存し、use Contect appiを利用してproviderの中のstateとdispatchを取得することです.その上のパッケージはease-peasyなどがあります.
// context
const countContex = createContext({count: 1, setCount: (count: number) => {}})
// dispatch state provider
const StoreProvider = ({children}: {children:ReactElement}) => {
const [count, setCount] = useState(1)
return
{children}
}
// useContext
const ComponentA = () => {
const { count, setCount} = useContext(countContex)
// ....
}
この案はteleStateの欠点に対して:1、コンポーネントの外で状態を取得/更新するのはあまり便利ではない.2、使用状態においては、Providerの作用域問題を考慮する必要がある.mobx
当初はmobxのapiデザインが対象に向けられていましたが、多くのデコレーションモードが使われています.今、Hook sは関数のコンポーネントを抱擁させます.いささかばつが悪いように見える.ここでも過大評価はしません.
redux
利点:reduxはデータフローを規範化している.短所:状態管理を集中的に管理して、怠惰な負荷に不利です.