MCPcopy Index your code
hub / github.com/TanStack/table / memo

Function memo

packages/table-core/src/utils.ts:136–200  ·  view source on GitHub ↗
(
  getDeps: (depArgs?: TDepArgs) => [...TDeps],
  fn: (...args: NoInfer<[...TDeps]>) => TResult,
  opts: {
    key: any
    debug?: () => any
    onChange?: (result: TResult) => void
  },
)

Source from the content-addressed store, hash-verified

134}
135
136export function memo<TDeps extends readonly any[], TDepArgs, TResult>(
137 getDeps: (depArgs?: TDepArgs) => [...TDeps],
138 fn: (...args: NoInfer<[...TDeps]>) => TResult,
139 opts: {
140 key: any
141 debug?: () => any
142 onChange?: (result: TResult) => void
143 },
144): (depArgs?: TDepArgs) => TResult {
145 let deps: any[] = []
146 let result: TResult | undefined
147
148 return (depArgs) => {
149 let depTime: number
150 if (opts.key && opts.debug) depTime = Date.now()
151
152 const newDeps = getDeps(depArgs)
153
154 const depsChanged =
155 newDeps.length !== deps.length ||
156 newDeps.some((dep: any, index: number) => deps[index] !== dep)
157
158 if (!depsChanged) {
159 return result!
160 }
161
162 deps = newDeps
163
164 let resultTime: number
165 if (opts.key && opts.debug) resultTime = Date.now()
166
167 result = fn(...newDeps)
168 opts?.onChange?.(result)
169
170 if (opts.key && opts.debug) {
171 if (opts?.debug()) {
172 const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100
173 const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100
174 const resultFpsPercentage = resultEndTime / 16
175
176 const pad = (str: number | string, num: number) => {
177 str = String(str)
178 while (str.length < num) {
179 str = ' ' + str
180 }
181 return str
182 }
183
184 console.info(
185 `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,
186 `
187 font-size: .6rem;
188 font-weight: bold;
189 color: hsl(${Math.max(
190 0,
191 Math.min(120 - 120 * resultFpsPercentage, 120),
192 )}deg 100% 31%);`,
193 opts?.key,

Callers 15

FlexRenderDirectiveClass · 0.90
getFilteredRowModelFunction · 0.90
getSortedRowModelFunction · 0.90
getFacetedMinMaxValuesFunction · 0.90
getGroupedRowModelFunction · 0.90
getCoreRowModelFunction · 0.90
getExpandedRowModelFunction · 0.90
getPaginationRowModelFunction · 0.90
getFacetedUniqueValuesFunction · 0.90
getFacetedRowModelFunction · 0.90
headers.tsFile · 0.90
createColumnFunction · 0.90

Calls 2

padFunction · 0.85
onChangeMethod · 0.80

Tested by

no test coverage detected