| title | cacheSignal |
|---|
cacheSignalμ νμ¬ React μλ² μ»΄ν¬λνΈμμλ§ μ¬μ©ν μ μμ΅λλ€.
cacheSignalμ μ¬μ©νλ©΄ cache() μλͺ
μ΄ μΈμ λλλμ§ μ μ μμ΅λλ€.
const signal = cacheSignal();cacheSignalμ νΈμΆνλ©΄ AbortSignalμ μ»μ μ μμ΅λλ€.
import {cacheSignal} from 'react';
async function Component() {
await fetch(url, { signal: cacheSignal() });
}Reactκ° λ λλ§μ μλ£νλ©΄ AbortSignalμ΄ μ€λ¨λ©λλ€. μ΄λ₯Ό ν΅ν΄ λ μ΄μ νμνμ§ μμ μ§ν μ€μΈ μμ
μ μ·¨μν μ μμ΅λλ€.
λ λλ§μ΄ μλ£λ κ²μΌλ‘ κ°μ£Όνλ κ²½μ°λ λ€μκ³Ό κ°μ΅λλ€.
- Reactκ° μ±κ³΅μ μΌλ‘ λ λλ§μ μλ£ν κ²½μ°
- λ λλ§μ΄ μ€λ¨λ κ²½μ°
- λ λλ§μ΄ μ€ν¨ν κ²½μ°
μ΄ ν¨μλ λ§€κ°λ³μλ₯Ό λ°μ§ μμ΅λλ€.
cacheSignalμ λ λλ§ μ€μ νΈμΆλλ©΄ AbortSignalμ λ°νν©λλ€. κ·Έ μΈμ κ²½μ°μ cacheSignal()μ nullμ λ°νν©λλ€.
cacheSignalμ νμ¬ React μλ² μ»΄ν¬λνΈμμλ§ μ¬μ©ν μ μμ΅λλ€. ν΄λΌμ΄μΈνΈ μ»΄ν¬λνΈμμλ νμnullμ λ°νν©λλ€. ν₯ν ν΄λΌμ΄μΈνΈ μΊμκ° κ°±μ λκ±°λ 무ν¨νλ λ ν΄λΌμ΄μΈνΈ μ»΄ν¬λνΈμμλ μ¬μ©λ μμ μ λλ€. ν΄λΌμ΄μΈνΈμμ νμnullμ λ°ννλ€κ³ κ°μ νλ©΄ μ λ©λλ€.- λ λλ§ μΈλΆμμ νΈμΆνλ©΄
cacheSignalμnullμ λ°ννμ¬ νμ¬ μ€μ½νκ° μμν μΊμλμ§ μμμ λͺ νν ν©λλ€.
cacheSignalμ νΈμΆνμ¬ μ§ν μ€μΈ μμ²μ μ€λ¨ν μ μμ΅λλ€.
import {cache, cacheSignal} from 'react';
const dedupedFetch = cache(fetch);
async function Component() {
await dedupedFetch(url, { signal: cacheSignal() });
}import {cacheSignal} from 'react';
// π© Pitfall: The request will not actually be aborted if the rendering of `Component` is finished.
const response = fetch(url, { signal: cacheSignal() });
async function Component() {
await response;
}Reactκ° λ λλ§μ μλ£ν ν μ€λ₯ 무μνκΈ° {/ignore-errors-after-react-has-finished-rendering/}
ν¨μκ° μ€λ₯λ₯Ό λμ§λ κ²½μ° μ·¨μλ‘ μΈν κ²μΌ μ μμ΅λλ€. (μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ΄ λ«ν κ²½μ°) aborted μμ±μ μ¬μ©νμ¬ μ€λ₯κ° μ·¨μλ‘ μΈν κ²μΈμ§ μ€μ μ€λ₯μΈμ§ νμΈν μ μμ΅λλ€. μ·¨μλ‘ μΈν μ€λ₯λ 무μν μ μμ΅λλ€.
import {cacheSignal} from "react";
import {queryDatabase, logError} from "./database";
async function getData(id) {
try {
return await queryDatabase(id);
} catch (x) {
if (!cacheSignal()?.aborted) {
// only log if it's a real error and not due to cancellation
logError(x);
}
return null;
}
}
async function Component({id}) {
const data = await getData(id);
if (data === null) {
return <div>No data available</div>;
}
return <div>{data.name}</div>;
}