成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

React中完整實(shí)例講解Recoil狀態(tài)管理庫的使用

瀏覽:279日期:2022-06-10 14:04:03
目錄
  • Recoil狀態(tài)管理庫
  • Atom(options)
  • Selector(options)

Recoil狀態(tài)管理庫

先讓我吐槽一下,Recoil這個(gè)玩意文檔是真的不友好,另外發(fā)現(xiàn)國內(nèi)很少有人去用Recoil,然后好多文章都是照搬官網(wǎng)文檔,我特喵的要是出了問題直接看官方不就行了。如果你碰巧看到這個(gè)文章了,就細(xì)心看完吧,絕對(duì)的干貨。至于它的一些優(yōu)點(diǎn)特性,自己找找別的對(duì)比文章吧,我這里僅僅進(jìn)行一個(gè)簡(jiǎn)單的示例演示及學(xué)習(xí)。

第一步:創(chuàng)建項(xiàng)目

利用vite創(chuàng)建一個(gè)React項(xiàng)目,其他的一樣,別問我為啥只講vite,因?yàn)槲揖褪怯玫膙ite。

pnpm create vite
……選擇react項(xiàng)目至于是ts還是js看你自己的喜好……
npm install
npm run dev

這是我的項(xiàng)目目錄:

第二步:Recoil安裝

pnpm add recoil

項(xiàng)目使用

在main.tsx中插入<RecoilRoot />,注意這個(gè)標(biāo)簽必須是UI的根。

import ReactDOM from "react-dom/client";import { BrowserRouter } from "react-router-dom";import { RecoilRoot } from "recoil";import App from "./App";import "antd/dist/reset.css";import "animate.css";import "@/assets/styles/index.scss";// react 18 創(chuàng)建(會(huì)導(dǎo)致 antd 菜單折疊時(shí)閃爍,等待官方修復(fù))ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(  // * react嚴(yán)格模式  // <React.StrictMode>  <BrowserRouter>   <RecoilRoot>    <App></App>   </RecoilRoot>  </BrowserRouter>,  // </React.StrictMode>,);

為了使用方便,我將其按照大眾化水準(zhǔn)創(chuàng)建了一個(gè)目錄,并進(jìn)行了一些簡(jiǎn)單的封裝。好不好用大家自行使用,不好用自己改好用。

// 示例封裝import { atom, selector } from "recoil";import ThemeConfig from "@/config/themeConfig";import { ITheme } from "@/interface/theme";const theme: ITheme = {  title: import.meta.env.VITE_TITLE,  theme: "default",  i18n: ThemeConfig.i18nDef,};export const themeState = atom({  key: "themeState",  default: theme,});export default {  i18nState: atom({   key: "i18nState",   default: ThemeConfig.i18nDef,  }),  useThemeState: selector({   key: "useThemeState",   get: ({ get }) => {    return get(themeState);   },   set: ({ get, set }, newValue) => {    const oldValue = get(themeState);    const updateValue = Object.assign({}, oldValue, newValue);    set(themeState, updateValue);   },  }),};
// index.ts入口import Theme from "./modules/theme";export default {  …Theme,};

使用示例

import { useEffect } from "react";import { Row, Col, Pagination, Switch } from "antd";import { atom, useSetRecoilState, useRecoilState, useRecoilValue } from "recoil";import Store from "@/store";import "@/assets/styles/page/home.scss";export default function Home() {  const [i18nState, setI18nState] = useRecoilState(Store.i18nState);  const setThemeState = useSetRecoilState(Store.useThemeState);  const themeState = useRecoilValue(Store.useThemeState);  useEffect(() => {   setI18nState("en-us");   console.log(i18nState);  }, []);  const onChange = (checked: boolean) => {   console.log(`switch to ${checked}`);   setThemeState({ i18n: "en-us" });   if (checked) {    setThemeState({ i18n: "zh-cn" });   } else {    setThemeState({ i18n: "en-us" });   }   console.log(themeState);  };  return (   <Row justify="center" className="content-body home-box">    <Col span={24}>     <Pagination total={85} showSizeChanger showQuickJumper showTotal={(total) => `Total ${total} items`}></Pagination>     <Switch defaultChecked onChange={onChange} />    </Col>   </Row>  );}

重點(diǎn)!!!:針對(duì)其特性我簡(jiǎn)單給大家講一下如何正確理解并使用它的一些屬性及hook,僅僅限于其常用的,不常用的大家自行研究或者給我留私信。

Atom(options)

包含我們應(yīng)用中狀態(tài)的來源。最細(xì)粒子,直接定義我們使用的狀態(tài),因?yàn)楹罄m(xù)的selector也是基于此進(jìn)行的操作。

export const demoState = atom({  key: "demoState",  default: ”demo”,});export const atomState = atom({  key: "atomState",  default: {i18n: “en”},});

Selector(options)

代表一個(gè)派生狀態(tài),你可以將派生狀態(tài)視為將狀態(tài)傳遞給以某種方式修改給定狀態(tài)的純函數(shù)的輸出。說白了,這個(gè)就是可以處理一下復(fù)雜的狀態(tài),或者處理一下自己需要的狀態(tài)。

export const useAtomState = selector({  key: "useAtomState",  get: ({ get }) => {return get(atomState)},  set: ({ get, set }, newValue) => {set(atomState, newValue)},});

useRecoilState(state)

利用此hook可以進(jìn)行讀寫操作,和react中的useState可以說是一模一樣的用法,你怎么理解useState就怎么理解useRecoilState就行。

const [demoState, setDemoState] = useRecoilState(demoState);

useRecoilValue(state)

這個(gè)就是直接讀取其內(nèi)部的值,僅此而以。

const demoState = useRecoilValue(demoState);

useSetRecoilState(state)

這個(gè)也是僅僅修改值,僅此而以。

const setDemoState = useSetRecoilState(demoState);

記住,你定義的什么就寫入什么,不要定義一個(gè)object寫入一個(gè)string或者其他的奇奇怪怪的東西,這樣肯定不會(huì)報(bào)錯(cuò),但是你用的時(shí)候肯定會(huì)肝火旺盛。

其他的hook大家自己研究玩吧。大家感興趣的話,直接去看下面的完整項(xiàng)目吧。

到此這篇關(guān)于React中完整實(shí)例講解Recoil狀態(tài)管理庫的使用的文章就介紹到這了,更多相關(guān)React Recoil內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品国产自产拍在线| 激情综合五月天| 久久99最新地址| 久久国产精品久久w女人spa| 中文字幕一区二区三区不卡在线| 97se亚洲国产综合自在线不卡| 678五月天丁香亚洲综合网| 婷婷亚洲久悠悠色悠在线播放| 99视频精品| 中文字幕一区二区不卡| 91亚洲精品乱码久久久久久蜜桃| 91精品国产综合久久精品图片| 日韩中文欧美在线| 亚洲一区图片| 一级特黄大欧美久久久| 狠狠久久婷婷| 亚洲欧洲精品一区二区精品久久久| 欧美91大片| 国产三级一区二区三区| av成人免费在线观看| 日韩精品一区二区在线| 成人精品视频网站| 欧美一卡2卡3卡4卡| 国产成人免费网站| 欧美一区二区三区免费在线看 | 国产精品yjizz| 中文字幕日本不卡| 99视频一区| 亚洲一二三四久久| 色综合久久久久久久久久久| 免费av成人在线| 欧美系列日韩一区| 国产寡妇亲子伦一区二区| 精品国产乱码久久久久久图片 | 另类图片国产| 日韩在线一区二区三区| 在线观看一区不卡| 国产精品456露脸| 精品国产91九色蝌蚪| 欧美精品麻豆| 亚洲精选一二三| 亚洲在线网站| 久久疯狂做爰流白浆xx| 日韩亚洲欧美成人一区| 91亚洲男人天堂| ●精品国产综合乱码久久久久| 亚洲黄色三级| 亚洲chinese男男1069| 一本久久a久久精品亚洲| 久草中文综合在线| 日韩精品一区二区三区在线观看 | 91小视频免费观看| 中文字幕在线观看不卡视频| 亚洲尤物在线| 韩国女主播成人在线观看| 久久一区二区三区国产精品| 亚洲午夜伦理| 日韩在线播放一区二区| 69av一区二区三区| 欧美一区影院| 亚洲欧美日韩国产综合在线| 久久黄色影院| 国产精品一区二区免费不卡| 国产午夜三级一区二区三| 99精品国产在热久久婷婷| 美腿丝袜亚洲综合| 久久久夜色精品亚洲| 中文精品视频| 国产精品综合网| 国产午夜精品福利| 久久精品主播| 成人午夜视频在线| 中文字幕在线不卡国产视频| 免费视频一区| 国产91在线|亚洲| 中文字幕高清一区| 久久久久在线| 99久久综合狠狠综合久久| 亚洲欧美欧美一区二区三区| 欧美熟乱第一页| 欧美精品麻豆| 日本伊人午夜精品| 久久久噜噜噜久噜久久综合| 亚洲一区欧美二区| 成人免费视频一区二区| 一级女性全黄久久生活片免费| 91精品国产黑色紧身裤美女| 欧美午夜欧美| 蜜臀精品久久久久久蜜臀| 精品国产免费人成在线观看| 国产一级一区二区| 福利电影一区二区三区| 亚洲卡通动漫在线| 欧美成人三级在线| 乱码第一页成人| 91丨porny丨首页| 图片区小说区国产精品视频| 亚洲精品在线一区二区| 久久av一区二区| 不卡的av在线播放| 天天爽夜夜爽夜夜爽精品视频| 久久亚洲二区三区| 91成人国产精品| 午夜精品av| 久久66热偷产精品| 亚洲色欲色欲www| 日韩一二三区不卡| 久久免费黄色| 国产自产在线视频一区| 韩国精品久久久| 亚洲精品国产a久久久久久| 日韩午夜在线影院| 久久亚洲影院| 一区在线观看| 成人免费视频一区二区| 日本免费在线视频不卡一不卡二| 国产精品久久久久9999吃药| 日韩一级高清毛片| 在线日韩一区二区| 中文一区二区| 午夜久久资源| 国产成人av电影在线播放| 亚洲国产成人高清精品| 国产性色一区二区| 欧美一区二区三区色| 一本久久精品一区二区| 亚洲精品社区| 欧美尤物一区| 国产91丝袜在线播放0| 日韩精品每日更新| 亚洲欧美自拍偷拍| 久久久不卡网国产精品一区| 欧美午夜不卡视频| 午夜亚洲一区| 亚洲二区免费| 色综合咪咪久久| 国产精品888| 久久精品国产久精国产爱| 亚洲综合成人在线| 综合久久一区二区三区| 国产视频一区二区在线| 日韩一区二区三区视频在线| 欧美性视频一区二区三区| 一本一本久久a久久精品综合妖精| 欧美精品一区在线| 99精品视频在线播放观看| 国产乱码精品一区二区三区忘忧草| 日本成人超碰在线观看| 一区二区三区加勒比av| 国产精品久久久久三级| 久久亚洲捆绑美女| 日韩欧美在线123| 91精品国产麻豆国产自产在线| 欧美视频在线观看一区二区| 欧美一级播放| 亚洲在线观看| 国产精品社区| 亚洲视频1区| 亚洲毛片播放| 影音先锋中文字幕一区| 国产精品v亚洲精品v日韩精品 | 亚洲伊人伊色伊影伊综合网| 亚洲桃色在线一区| 国产精品网友自拍| 欧美激情自拍偷拍| 欧美精品一区二区在线观看| 欧美电影免费观看高清完整版在线观看| 宅男在线国产精品| 91精品国产91久久久久久一区二区 | 欧美日产国产精品| 欧美日本不卡视频| 欧美日韩成人综合在线一区二区| 在线一区二区视频| 美女久久网站| 久久久久se| 久久视频一区| 欧美自拍偷拍一区| 欧美丝袜第三区| 911精品国产一区二区在线| 欧美福利一区二区| 欧美一区二区视频免费观看| 日韩一区二区精品葵司在线| 欧美一级精品在线| 欧美一区二区三区视频免费| 欧美成人一区二区三区在线观看| 日韩西西人体444www| 久久综合五月天婷婷伊人| 久久蜜臀精品av| 欧美国产一区在线| 亚洲人一二三区| 亚洲高清免费观看| 天天av天天翘天天综合网色鬼国产 | 色av成人天堂桃色av| 欧美视频在线观看一区二区| 91精品国产高清一区二区三区 | 成人免费精品视频| 91香蕉视频在线| 欧美三级在线| 99日韩精品| 日本韩国一区二区三区视频|