Skip to main content

useCache

Cache data for a certain period of time. And you can synchronize data in different components. The CacheConfig component can set some default options for this hook.

API

function useCache<T>(
key: {},
options?: {
defaultValue?: T;
cache?: CacheInterface;
cacheTime?: number;
cacheSync?: boolean | { set?: boolean; delete?: boolean };
validate?: (value: any) => boolean;
onSet?: (value: any) => void;
onDelete?: (value: any) => void;
}
): [value: T | undefined, setCache: (newValue: T | undefined) => void];

interface CacheInterface {
has(key: any): boolean;
get(key: any): any;
getCacheTimestamp(key: any): number | undefined;
set(key: any, data: any, options?: { cacheTime?: number }): any;
delete(key: any): any;
isReady(): boolean;
once(name: "ready", listener: () => void): any;
off(name: "ready", listener: () => void): any;
for(key: any): {
on(name: "set" | "delete", listener: (data: any) => void): any;
off(name: "set" | "delete", listener: (data: any) => void): any;
};
}

Params:

  • key: Cache key. It can be any type except null and undefined.
  • options: Options object.
    • options.defaultValue: Default value when the cache value does not exist.
    • options.cache: Cache instance. Use MemoryCache by default. You can pass an instance that implements the CacheInterface.
    • options.cacheTime: Cache time, in milliseconds. Default is 5 minutes. You can set a permanent cache by setting this option greater than or equal to Number.MAX_SAFE_INTEGER, for example Infinity.
    • options.cacheSync: Synchronize data on set and/or delete data. Default is false. It can be an object to synchronize data in different events.
      • options.cacheSync.set: Synchronize data on set cache.
      • options.cacheSync.delete: Synchronize data on delete cache or when cache time expires.
    • options.validate: Validate the cache value. If it returns falsy, the defaultValue will be used.
    • options.onSet: Data set event. The value param will not be validated by the validate function.
    • options.onDelete: Data delete event (cache time expired or setCache(undefined) called). The value param will not be validated by the validate function.

Results:

  • value: Cache value or default value.
  • setCache: The function to set cache. It the newValue param is undefined, the cache will be deleted.

Examples

Basic

You can input some text, jump to other page, and then go back to this page to see the effect.

Initial cached data:
import React, { useState } from "react";
import { useCache } from "@lilib/hooks";

function Example() {
const [cache, setCache] = useCache("cache-basic", { defaultValue: "" });
const [value, setValue] = useState(cache);

return (
<>
<input
value={value}
onChange={(event) => {
if (event.target.value) {
setValue(event.target.value);
setCache(event.target.value);
} else {
setValue("");
setCache(undefined);
}
}}
/>{" "}
<span>Initial cached data: {cache}</span>
</>
);
}

export default Example;

Synchronization

Cached data:
Cached data:
import React from "react";
import { useCache } from "@lilib/hooks";

function Component() {
const [cache, setCache] = useCache("cache-sync", {
defaultValue: "",
cacheSync: true,
});

return (
<>
<input
value={cache}
onChange={(event) => {
setCache(event.target.value || undefined);
}}
/>{" "}
<span>Cached data: {cache}</span>
</>
);
}

function Example() {
return (
<>
<Component />
<br />
<Component />
</>
);
}

export default Example;

Set cache time

The cache data will be deleted after 3 seconds (default is 5 minutes).

Data:
import React, { useState } from "react";
import { useCache } from "@lilib/hooks";

function Example() {
const [data, setData] = useState("");
const [cache, setCache] = useCache("cache-time", {
defaultValue: "",
cacheSync: true,
cacheTime: 3000,
onSet: (data) => setData(data),
onDelete: () => setData("deleted"),
});

return (
<>
<input
value={cache}
onChange={(event) => {
setCache(event.target.value);
}}
/>{" "}
Data: {data}
</>
);
}

export default Example;