基于Reactv16的Cotext简单封装的轻量级状态库。
安装pmistall--savereact-fax-store使用import{createStore}from'react-fax-store';costStore=createStore(()=>({text:'fax-store'}));fuctioApp(){costdata=React.useCotext(Store.Cotext);//{text:'fax-store'}subscribestatecoststate=store.useState();//{text:'fax-store'}subscribestatecosttext=store.useSelector(state=>state.text);//fax-storesubscribeolystate.textchagecoststore=store.useStore();store.getState();//{text:'fax-store'}store.setState({text:'react-fax-store'});//orcostupdate=store.useUpdate();update({text:'react-fax-store'});retur<Store.Cosumer>{state=>cosole.log(state)}</Store.Cosumer>}<Store.Provider><App/></Store.Provider>createStore(iitialValue:()=>{}):Store;创建Store对象import{createStore}from'react-fax-store';createStore(()=>{retur{...}})StoreProvider<Store.Provider>...</Store.Provider>Cosumer<Store.Provider>...<Store.Cosumer>{state=>{retur<div>{state}</div>}}</Store.Cosumer>...</Store.Provider>useState订阅整个数据fuctioIfo(){coststate=Store.useState();retur<div>{state}</div>}useSelector订阅指定数据fuctioIfo(){coststate=Store.useSelector(state=>{retur{userame:state.userame}});retur<div>{state.userame}</div>}useUpdate更新数据fuctioActio(){costupdate=Store.useUpdate(prevState=>{retur{userame:prevState.userame+'_xc'}});retur<buttooClick={update}>Add</butto>}useProvider别名:useStore获取由Provider提供的store数据对象coststore=Store.useStore();store.getState();//orstore.setState(...)Cotext可直接通过React.useCotext获取数据coststate=React.useCotext(Store.Cotext);iterfaceexporttypewithHooks=<T>(c:T)=>T;exporttypecreateStore=<TextedsRecord<strig|umber|symbol,ay>>(iitialValue:()=>T):Store<T>exporttypeUpdate<T={}>=<KextedskeyofT>(state:((prevState:Readoly<T>)=>Pick<T,K>|T|ull)|Pick<T,K>|T|ull)=>void;typeSubscriber<T={}>=(prevState:Readoly<T>,extState:Readoly<T>)=>void;typeUseSelector<T={}>=<Sexteds(state:T)=>ay>(selector:S)=>ReturType<S>;typeUseUpdate<T={}>=()=>Update<T>;typeUseState<T={}>=()=>T;typeUseProvider<T>=()=>Provider<T>;typeCosumer<T={}>=React.FC<CosumerProps<T>>;typeCotext<T>=React.Cotext<T>;iterfaceCosumerProps<T={}>{childre:(state:T)=>React.ReactElemet|ull;}iterfaceProvider<T={}>extedsReact.Compoet<{},T>{getSubscribeCout():umber;subscribe(subscriber:Subscriber<T>):()=>void;getState():T;}iterfaceStore<T={}>{Cotext:Cotext<T>;Provider:ew(props:{})=>Provider<T>;Cosumer:Cosumer<T>;useProvider:UseProvider<T>;useStore:UseProvider<T>;useState:()=>T;useSelector:UseSelector<T>;useUpdate:UseUpdate<T>;}Examplestore.jsimport{createStore}from'react-fax-store';exportdefaultcreateStore(()=>{retur{ame:'react-fax-store';}});idex.jsimportReactfrom'react'importStorefrom'./store';fuctioIfo(){coststate=Store.useState();retur<div>{state.ame}</div>}fuctioApp(){retur(<Store.Provider><Ifo/></Store.Provider>);}exportdefaultApp;点击空白处退出提示
评论