国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ahooks.js:一款強(qiáng)大的React Hooks庫(kù)及其API使用教程(一)

這篇具有很好參考價(jià)值的文章主要介紹了ahooks.js:一款強(qiáng)大的React Hooks庫(kù)及其API使用教程(一)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、ahooks.js簡(jiǎn)介

ahooks是一款由阿里巴巴開(kāi)發(fā)團(tuán)隊(duì)設(shè)計(jì)的React Hooks庫(kù),提供了一系列實(shí)用的React Hooks,以便開(kāi)發(fā)者更好地使用React的功能。ahooks的設(shè)計(jì)原則是“最小API,最大自由”,旨在提供最小的、最易于理解和使用的API,同時(shí)保留最大的使用自由度。

二、ahooks.js安裝

使用npm或yarn安裝ahooks:

npm install ahooks
# 或者
yarn add ahooks

三、ahooks.js API介紹與使用教程

1. useRequest

useRequest是ahooks中最常用的一個(gè)API,它用于處理異步請(qǐng)求和其相關(guān)狀態(tài)。

import { useRequest } from 'ahooks';
import axios from 'axios';

function App() {
  const { data, error, loading } = useRequest(() => axios.get('https://api.example.com'));

  if (loading) {
    return <div>Loading...</div>;
  }
  if (error) {
    return <div>Error: {error.message}</div>;
  }
  return <div>{data}</div>;
}

在上述代碼中,useRequest接收一個(gè)函數(shù)作為參數(shù),該函數(shù)返回一個(gè)Promise。useRequest會(huì)自動(dòng)處理loading和error狀態(tài),使得你可以更專注于業(yè)務(wù)邏輯。

2. useAntdTable

useAntdTable是一個(gè)與Ant Design Table配合使用的Hook,它可以幫助你快速創(chuàng)建一個(gè)具有分頁(yè)、排序和篩選功能的表格。

import { useAntdTable } from 'ahooks';
import { Table } from 'antd';

const getTableData = ({ current, pageSize }) => {
  // 這是一個(gè)示例API,你應(yīng)該替換為你的實(shí)際API
  const api = `https://api.example.com?page=${current}&size=${pageSize}`;
  return axios.get(api);
};

function App() {
  const { tableProps, search } = useAntdTable(getTableData, { defaultPageSize: 5 });

  const { type, changeType, submit, reset } = search;

  return (
    <>
      <Table {...tableProps} rowKey="id" />
    </>
  );
}

在上述代碼中,useAntdTable接收一個(gè)獲取表格數(shù)據(jù)的函數(shù)和一些配置作為參數(shù)。getTableData函數(shù)應(yīng)該返回一個(gè)Promise,該P(yáng)romise解析為{ list: [], total: 0 }的格式。

3. useSize

useSize是一個(gè)用于獲取元素尺寸的Hook。

import { useSize } from 'ahooks';

function App() {
  const [size, ref] = useSize();

  return (
    <div ref={ref}>
      width: {size.width}px, height: {size.height}px
    </div>
  );
}

在上述代碼中,useSize返回一個(gè)數(shù)組,第一個(gè)元素是尺寸對(duì)象,第二個(gè)元素是需要測(cè)量尺寸的元素的ref。

4. useBoolean

useBoolean 是一個(gè)用于處理布爾值狀態(tài)的 Hook。它返回一個(gè)數(shù)組,包含一個(gè)布爾值和一些操作這個(gè)值的函數(shù)。

import { useBoolean } from 'ahooks';

function App() {
  const [state, { toggle, setTrue, setFalse }] = useBoolean(false);

  return (
    <div>
      <p>{`狀態(tài): ${state}`}</p>
      <button onClick={toggle}>切換</button>
      <button onClick={setTrue}>設(shè)為真</button>
      <button onClick={setFalse}>設(shè)為假</button>
    </div>
  );
}

在上述代碼中,useBoolean 接收一個(gè)初始值作為參數(shù)(默認(rèn)為 false),返回一個(gè)數(shù)組。數(shù)組的第一個(gè)元素是當(dāng)前的布爾值,第二個(gè)元素是一個(gè)對(duì)象,包含 toggle、setTruesetFalse 三個(gè)函數(shù),用于改變布爾值的狀態(tài)。

5. useToggle

useToggle 是一個(gè)用于在兩個(gè)值之間切換的 Hook。它返回一個(gè)數(shù)組,包含當(dāng)前的值和一個(gè)切換函數(shù)。

import { useToggle } from 'ahooks';

function App() {
  const [state, { toggle }] = useToggle('Hello', 'World');

  return (
    <div>
      <p>{state}</p>
      <button onClick={toggle}>切換</button>
    </div>
  );
}

在上述代碼中,useToggle 接收兩個(gè)參數(shù),返回一個(gè)數(shù)組。數(shù)組的第一個(gè)元素是當(dāng)前的值,第二個(gè)元素是一個(gè)對(duì)象,包含一個(gè) toggle 函數(shù),用于在兩個(gè)值之間切換。

6. useHover

useHover 是一個(gè)用于追蹤元素 hover 狀態(tài)的 Hook。它返回一個(gè)數(shù)組,包含當(dāng)前的 hover 狀態(tài)和一個(gè) ref。

import { useHover } from 'ahooks';

function App() {
  const [isHovering, hoverRef] = useHover();

  return (
    <div ref={hoverRef}>
      {isHovering ? '正在懸停' : '未懸停'}
    </div>
  );
}

在上述代碼中,useHover 返回一個(gè)數(shù)組。數(shù)組的第一個(gè)元素是一個(gè)布爾值,表示當(dāng)前元素是否正在被懸停,第二個(gè)元素是一個(gè) ref,需要被賦給需要追蹤 hover 狀態(tài)的元素。

對(duì)不起,我理解錯(cuò)了你的要求。讓我們按照你的要求,從第七個(gè)開(kāi)始介紹,并提供代碼示例和解釋。

7. useDebounce

useDebounce 是一個(gè)用于防抖動(dòng)操作的 Hook,它可以幫助我們控制某些頻繁觸發(fā)的操作。

import { useDebounce } from 'ahooks';
import { useState } from 'react';

function App() {
  const [value, setValue] = useState('');
  const debouncedValue = useDebounce(value, { wait: 500 });

  return (
    <div>
      <input
        value={value}
        onChange={(e) => setValue(e.target.value)}
        placeholder="Typed value"
        style={{ width: 280, marginRight: 16 }}
      />
      <p>Debounced Value: {debouncedValue}</p>
    </div>
  );
}

在上述代碼中,useDebounce 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是需要防抖的值,第二個(gè)參數(shù)是一個(gè)配置對(duì)象,其中的 wait 屬性用于設(shè)置防抖延遲的時(shí)間。useDebounce 返回一個(gè)新的值,這個(gè)值會(huì)在指定的延遲時(shí)間后更新。

8. useEventListener

useEventListener 是一個(gè)用于添加事件監(jiān)聽(tīng)器的 Hook。

import { useEventListener } from 'ahooks';

function App() {
  useEventListener('click', () => {
    console.log('document clicked');
  });

  return <div>Hello World</div>;
}

在上述代碼中,useEventListener 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是需要監(jiān)聽(tīng)的事件類型,例如 ‘click’、‘keydown’ 等。第二個(gè)參數(shù)是事件觸發(fā)時(shí)的回調(diào)函數(shù)。這個(gè) Hook 會(huì)在組件掛載時(shí)添加事件監(jiān)聽(tīng)器,并在組件卸載時(shí)自動(dòng)移除。

9. useFusionTable

useFusionTable 是一個(gè)用于處理表格數(shù)據(jù)的 Hook。

import { useFusionTable } from 'ahooks';

function App() {
  const { tableProps, search } = useFusionTable(getTableData, {
    defaultPageSize: 5,
  });

  return (
    <Table {...tableProps} rowKey="id" />
  );
}

在上述代碼中,useFusionTable 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)獲取表格數(shù)據(jù)的函數(shù),第二個(gè)參數(shù)是一個(gè)配置對(duì)象,可以設(shè)置默認(rèn)的頁(yè)大小等。useFusionTable 返回一個(gè)對(duì)象,其中包含 tablePropssearch,分別用于控制表格的屬性和搜索功能。

10. useKeyPress

useKeyPress 是一個(gè)用于監(jiān)聽(tīng)鍵盤(pán)按鍵的 Hook。

import { useKeyPress } from 'ahooks';

function App() {
  const isPressingA = useKeyPress('a');

  return <div>{isPressingA ? 'You are pressing A' : 'Not pressing A'}</div>;
}

在上述代碼中,useKeyPress 接收一個(gè)參數(shù),即需要監(jiān)聽(tīng)的按鍵。它返回一個(gè)布爾值,表示該按鍵是否正在被按下。

11. useLoading

useLoading 是一個(gè)用于顯示加載狀態(tài)的 Hook。

import { useLoading } from 'ahooks';

function App() {
  const [isLoading, { startLoading, endLoading }] = useLoading();

  return (
    <div>
      {isLoading ? 'Loading...' : 'Not Loading'}
      <button onClick={startLoading}>Start Loading</button>
      <button onClick={endLoading}>End Loading</button>
    </div>
  );
}

在上述代碼中,useLoading 不需要接收任何參數(shù),它返回一個(gè)數(shù)組。數(shù)組的第一個(gè)元素是一個(gè)布爾值,表示是否正在加載。第二個(gè)元素是一個(gè)對(duì)象,包含 startLoadingendLoading 方法,用于控制加載狀態(tài)。

12. usePrevious

usePrevious 是一個(gè)用于獲取前一個(gè)狀態(tài)的 Hook。

import { usePrevious } from 'ahooks';
import { useState } from 'react';

function App() {
  const [count, setCount] = useState(0);
  const previousCount = usePrevious(count);

  return (
    <div>
      <p>Current Count: {count}</p>
      <p>Previous Count: {previousCount}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}

在上述代碼中,usePrevious 接收一個(gè)參數(shù),即當(dāng)前的狀態(tài)值。它返回前一個(gè)狀態(tài)的值。

13. useForm

useForm 是一個(gè)用于處理表單數(shù)據(jù)雙向綁定的 Hook。

import { useForm } from 'ahooks';

function App() {
  const { form, setForm, reset } = useForm();

  const handleSubmit = () => {
    // 處理表單提交邏輯
    console.log(form);
  };

  return (
    <div>
      <input
        type="text"
        value={form.name}
        onChange={(e) => setForm({ ...form, name: e.target.value })}
      />
      <input
        type="text"
        value={form.email}
        onChange={(e) => setForm({ ...form, email: e.target.value })}
      />
      <button onClick={handleSubmit}>提交</button>
      <button onClick={reset}>重置</button>
    </div>
  );
}

在上述代碼中,我們使用 useForm 創(chuàng)建一個(gè)表單對(duì)象。它返回一個(gè)包含 formsetFormreset 的對(duì)象。

  • form 是一個(gè)表示表單數(shù)據(jù)的對(duì)象,可以通過(guò) form.nameform.email 來(lái)訪問(wèn)表單字段的值。
  • setForm 是一個(gè)函數(shù),用于更新表單數(shù)據(jù)。在輸入框的 onChange 事件中,我們使用 setForm 來(lái)更新相應(yīng)字段的值。
  • reset 是一個(gè)函數(shù),用于重置表單數(shù)據(jù)為初始狀態(tài)。

通過(guò)使用 useForm,我們可以輕松地實(shí)現(xiàn)表單數(shù)據(jù)的雙向綁定,并處理表單提交和重置的邏輯。

14. useUpdate

useUpdate 是一個(gè)用于強(qiáng)制更新組件的 Hook。

import { useUpdate } from 'ahooks';

function App() {
  const update = useUpdate();

  return (
    <div>
      Current Time: {Date.now()}
      <button onClick={update}>Update</button>
    </div>
  );
}

在上述代碼中,useUpdate 不需要接收任何參數(shù),它返回一個(gè)函數(shù)。調(diào)用這個(gè)函數(shù)可以強(qiáng)制更新組件。

15. useUnmount

useUnmount 是一個(gè)用于處理組件卸載時(shí)的邏輯的 Hook。

import { useUnmount } from 'ahooks';

function App() {
  useUnmount(() => {
    console.log('Component is unmounting');
  });

  return <div>Hello World</div>;
}

在上述代碼中,useUnmount 接收一個(gè)函數(shù)作為參數(shù),這個(gè)函數(shù)將在組件卸載時(shí)被調(diào)用。

16. useThrottle

useThrottle 是一個(gè)用于實(shí)現(xiàn)節(jié)流操作的 Hook。

import { useThrottle } from 'ahooks';
import { useState } from 'react';

function App() {
  const [value, setValue] = useState('');
  const throttledValue = useThrottle(value, { wait: 500 });

  return (
    <div>
      <input
        value={value}
        onChange={(e) => setValue(e.target.value)}
        placeholder="Typed value"
        style={{ width: 280, marginRight: 16 }}
      />
      <p>Throttled Value: {throttledValue}</p>
    </div>
  );
}

在上述代碼中,useThrottle 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是需要節(jié)流的值,第二個(gè)參數(shù)是一個(gè)配置對(duì)象,其中的 wait 屬性用于設(shè)置節(jié)流的時(shí)間。useThrottle 返回一個(gè)新的值,這個(gè)值會(huì)在指定的時(shí)間間隔內(nèi)最多改變一次。

17. useToggle

useToggle 是一個(gè)用于切換布爾值的 Hook。

import { useToggle } from 'ahooks';

function App() {
  const [state, { toggle }] = useToggle();

  return (
    <div>
      <p>State: {state ? 'ON' : 'OFF'}</p>
      <button onClick={toggle}>Toggle</button>
    </div>
  );
}

在上述代碼中,useToggle 返回一個(gè)數(shù)組。數(shù)組的第一個(gè)元素是當(dāng)前的狀態(tài),第二個(gè)元素是一個(gè)對(duì)象,包含 toggle 方法,用于切換狀態(tài)。

18. useUpdateEffect

useUpdateEffect 是一個(gè)用于處理組件更新時(shí)的邏輯的 Hook。

import { useUpdateEffect } from 'ahooks';
import { useState } from 'react';

function App() {
  const [count, setCount] = useState(0);

  useUpdateEffect(() => {
    console.log('Count has changed');
  }, [count]);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}

在上述代碼中,useUpdateEffect 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)將在依賴項(xiàng)更新時(shí)被調(diào)用。第二個(gè)參數(shù)是一個(gè)依賴項(xiàng)數(shù)組。

19. useWhyDidYouUpdate

useWhyDidYouUpdate 是一個(gè)用于跟蹤組件更新原因的 Hook。

import { useWhyDidYouUpdate } from 'ahooks';
import { useState } from 'react';

function App(props) {
  useWhyDidYouUpdate('App', props);

  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}

在上述代碼中,useWhyDidYouUpdate 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是組件的名字,第二個(gè)參數(shù)是組件的 props。這個(gè) Hook 會(huì)在組件更新時(shí)打印出更新的原因。

當(dāng)然,讓我們繼續(xù)介紹一個(gè) API:useInterval

20.useInterval

useInterval 是一個(gè)用于設(shè)置定時(shí)器的 Hook。

import { useInterval } from 'ahooks';
import { useState } from 'react';

function App() {
  const [count, setCount] = useState(0);

  useInterval(() => {
    setCount(count + 1);
  }, 1000);

  return <div>Count: {count}</div>;
}

在上述代碼中,useInterval 接收兩個(gè)參數(shù)。第一個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)將在指定的間隔時(shí)間被調(diào)用。第二個(gè)參數(shù)是間隔時(shí)間,單位是毫秒。

這個(gè) Hook 會(huì)在組件掛載時(shí)開(kāi)始定時(shí)器,并在組件卸載時(shí)自動(dòng)清除定時(shí)器。所以你不需要手動(dòng)管理定時(shí)器的生命周期。

更多關(guān)于ahooks.js的API介紹,請(qǐng)查看專欄:ahooks.js:一款強(qiáng)大的React Hooks庫(kù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-652806.html

到了這里,關(guān)于ahooks.js:一款強(qiáng)大的React Hooks庫(kù)及其API使用教程(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • React Hooks的講解與教程

    React Hooks的講解與教程

    React Hooks 是 React 16.8 新增的一種特性,它可以讓你在函數(shù)式組件中使用 state、生命周期、context 等 React 特性。Hooks 可以讓你將復(fù)雜的邏輯拆分成多個(gè)獨(dú)立可重用的函數(shù),并且使得這些函數(shù)更加易于理解和測(cè)試。 復(fù)雜度高 :類組件的定義和使用更加復(fù)雜繁瑣。在類組件中,需

    2024年02月11日
    瀏覽(41)
  • React Hooks 基本使用

    class 組件如果業(yè)務(wù)復(fù)雜,很難拆分和重構(gòu),很難測(cè)試;相同業(yè)務(wù)邏輯分散到各個(gè)方法中,邏輯混亂 邏輯復(fù)用像 HOC 、 Render Props ,不易理解,學(xué)習(xí)成本高 React 提倡函數(shù)式編程,函數(shù)更易拆分,更易測(cè)試 但是函數(shù)組件太簡(jiǎn)單,為了增強(qiáng)函數(shù)組件的功能,媲美 class 組件: 函數(shù)組

    2024年01月21日
    瀏覽(59)
  • React Hooks 詳細(xì)使用介紹

    useState 是 React 中的一個(gè)基礎(chǔ) Hook,允許你在不使用 class 組件的情況下管理組件狀態(tài)。 參數(shù) 初始值 你可以直接傳遞狀態(tài)的初始值給 useState : 使用函數(shù)設(shè)置初始值 當(dāng)初始化狀態(tài)代價(jià)較大時(shí),你可以傳遞一個(gè)函數(shù): 返回值 useState 返回一個(gè)數(shù)組,其中包括當(dāng)前狀態(tài)值和一個(gè)更新

    2024年02月13日
    瀏覽(21)
  • react中hooks的理解與使用

    react中hooks的理解與使用

    一、作用 我們知道react組件有兩種寫(xiě)法一種是類組件,另一種是函數(shù)組件。而函數(shù)組件是無(wú)狀態(tài)組件,如果我們要想改變組件中的狀態(tài)就無(wú)法實(shí)現(xiàn)了。為此,在react16.8版本后官方推出hooks,用于函數(shù)組件更改狀態(tài)。 二、常用API 1、useState :存儲(chǔ)變量和修改變量 用法: 有兩個(gè)參

    2024年02月13日
    瀏覽(24)
  • React - Redux Hooks的使用細(xì)節(jié)詳解

    Redux中Hooks介紹 在之前的redux開(kāi)發(fā)中,為了讓組件和redux結(jié)合起來(lái),我們使用了react-redux庫(kù)中的connect : 但是這種方式必須使用高階函數(shù)結(jié)合返回的高階組件; 并且必須編寫(xiě):mapStateToProps和 mapDispatchToProps映射的函數(shù), 具體使用方式在前面文章有講解; 在Redux7.1開(kāi)始,提供了Hook的方式

    2024年02月02日
    瀏覽(15)
  • React Hooks的useState、useRef使用

    React Hooks 是 React 16.8 版本引入的新特性,它允許你在不編寫(xiě) class 的情況下使用 state 和其他 React 特性。其中, useState ?和? useRef ?是兩個(gè)常用的 Hooks。 1. useState useState ?是一個(gè)允許你在函數(shù)組件中添加 state 的 Hook。 使用說(shuō)明: useState ?返回一個(gè)狀態(tài)變量和一個(gè)設(shè)置該變量的函

    2024年02月02日
    瀏覽(22)
  • React的10個(gè)常用Hooks及使用場(chǎng)景

    React是一款非常流行的JavaScript庫(kù),它提供了許多Hooks,用于管理函數(shù)組件的狀態(tài)和生命周期。下面是React的每個(gè)Hooks的使用場(chǎng)景和示例: useState用于在函數(shù)組件中管理狀態(tài)。 它返回一個(gè)包含當(dāng)前狀態(tài)和一個(gè)更新?tīng)顟B(tài)的函數(shù)的數(shù)組。更新?tīng)顟B(tài)的函數(shù)可以接受一個(gè)新的值,并更新?tīng)?/p>

    2024年02月09日
    瀏覽(21)
  • react 【七】各種hooks的使用/SPA的缺點(diǎn)

    react 【七】各種hooks的使用/SPA的缺點(diǎn)

    依然需要在index.js使用context 1.8.1 ref綁定dom 1.8.2 ref解決閉包缺陷 1.11.1 什么是自定義Hook 1.11.2 Context的共享 Hook 1.11.3 獲取鼠標(biāo)滾動(dòng)位置 1.11.4 storage SPA頁(yè)面 1、不利于SEO優(yōu)化搜索引擎優(yōu)化 2、首屏渲染速度慢 1、不利于SEO優(yōu)化搜索引擎優(yōu)化 例如百度頁(yè)面在進(jìn)行收錄的時(shí)候 是

    2024年02月20日
    瀏覽(23)
  • React的7個(gè)常用Hooks及使用場(chǎng)景(含示例)

    React是一款非常流行的JavaScript庫(kù),它提供了許多Hooks,用于管理函數(shù)組件的狀態(tài)和生命周期。下面是React的每個(gè)Hooks的使用場(chǎng)景和示例: useState用于在函數(shù)組件中管理狀態(tài)。 它返回一個(gè)包含當(dāng)前狀態(tài)和一個(gè)更新?tīng)顟B(tài)的函數(shù)的數(shù)組。更新?tīng)顟B(tài)的函數(shù)可以接受一個(gè)新的值,并更新?tīng)?/p>

    2024年02月10日
    瀏覽(19)
  • ChatGPT人工智能對(duì)話系統(tǒng)源碼 一款非常強(qiáng)大的AI智能系統(tǒng) 附帶完整的搭建教程

    ChatGPT人工智能對(duì)話系統(tǒng)源碼 一款非常強(qiáng)大的AI智能系統(tǒng) 附帶完整的搭建教程

    隨著人工智能技術(shù)的不斷發(fā)展,對(duì)話系統(tǒng)作為人機(jī)交互的重要方式,已經(jīng)成為了各個(gè)領(lǐng)域的熱門(mén)應(yīng)用。ChatGPT作為一款強(qiáng)大的人工智能對(duì)話系統(tǒng),備受關(guān)注。它基于深度學(xué)習(xí)技術(shù),通過(guò)學(xué)習(xí)大量的語(yǔ)料庫(kù),實(shí)現(xiàn)了自然語(yǔ)言理解和生成的能力,能夠與用戶進(jìn)行智能化的交互。 以

    2024年01月17日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包