在react專案中使用freactal做狀態管理

2021-09-24 07:00:16 字數 2187 閱讀 3346

3.在專案中的應用

4.舉個專案中的操作栗子

結語單頁應用還是需要乙個狀態管理器,之前嘗試過redux,後來覺得它的寫法太繁瑣了,還需要裝各種依賴,棄之,使用乙個較為簡單的freactal。

providerstate()

複製**

不同於redux,freactal可以設定多個store,所以providerstate有乙個特性:在某個先載入的元件使用providerstate提供了資料,那麼後載入的元件使用providerstate傳入乙個空物件,也可以拿到之前存入store裡面的資料,比如:

providerstate({})

複製**

可以理解為freactal雖然支援書寫多個store,但是資料的**是唯一的,只是寫法上可以書寫多個store.js用於區分不同的store,如果你不需要別的store裡面的資料,可以使用injectstate進行過濾。

injectstate(component, key)

複製**

key用於篩選store裡面的資料,再次宣告:如果某個先載入的元件使用providerstate往store裡面新增的資料,那麼後載入的元件使用providerstate也是可以拿到這些資料的,所以通過injectstate進行過濾你所需要的資料,只有過濾後的資料改變,才會觸發對應的元件更新。

const effects = )

}複製**

const initialstate = () => ()

複製**

更多api請檢視文件:freactal

最初接觸狀態管理容器的時候直接把介面請求中的資料往store裡面丟,其實這是沒有必要的,而且會讓**的書寫變得十分的繁瑣,於是認真思考了一下使用狀態管理容器的初衷,總結有以下幾點:

使用react開發通常會把元件細化,當元件的層級比較多,資料一層一層往下傳遞,書寫的體驗就會變得十分糟糕,在單頁應用中,這個缺點會無限放大。

如果有些資料需要在多個元件中共享,那麼請放在store中。這樣無論元件的層級有多深,大家都可以使用this.props拿到。

比如當子孫元件需要更新祖先元件的狀態,用於顯示乙個modal,那麼**會變成這樣: 在祖先元件中定義乙個方法:

showmodal = (bool) => );

}複製**

方法通過層層傳遞,傳入子孫元件中,呼叫該方法

this.props.showmodal(true)

複製**

**變得十分繁瑣,也不優雅,不如把這個狀態存入store,當store中的資料改變,ui會被更新,兄弟元件之間資料的操作更新ui其實也是同理。

定義store.js

import  from 'freactal';

// active為1是雲閱讀,2是蝸牛

const initialstate = () => ();

const effects = )

};export default ;

複製**

封裝withstore.js

import  from 'freactal';

import createlogger from 'freactal-logger';

export default (store, keys) => (statefull) => );

middleware.push(logger);

} return providestate()(injectstate(statefull, keys));

}複製**

ui元件連線store

import store from './store';

import withstore from './withstore';

@withstore(store, ['active'])

class result extends react.component {}

複製**

react16.3.1已經更新了新的context api,操作共享資料變得十分方便了,有空可以研究一下,但是它並不能替代狀態管理容器,在單頁的應用中,複雜的場景下,還是需要它。

原文連線

在專案中使用react

1.執行 cnpm install react react dom s react安裝包 專門用於建立元件和虛擬dom的,同時元件的生命週期都在這個包中 react dom安裝包 專門進行dom操作的,最主要的應用場景就是reactdom.render 2.在index.html頁面中建立容器 di...

在 React 專案中使用 ECharts

重要檔案版本 在 react 專案中使用 echarts 生成圖表,與使用其他第三方庫沒有太大的區別,只要在 react 的元件componentdidmount宣告週期中初始化 echarts 圖表,然後在每次更新元件時呼叫 echarts 例項的setoption 方法更新配置即可,以下記錄了使...

03 React 在專案中使用react

一 安裝環境npm i react react dom s 二 在index.html頁面中建立容器 三 匯入包 1.這兩個匯入的時候,接受的成員名稱,必須這樣寫 import react from react 建立元件,虛擬dom元素,生命週期 import reactdom from react...