В чем разница между `useCallback` с пустым массивом в качестве входных данных и` useCallback` без второго параметра?

Сделать виртуальный дескриптор виртуальным, когда ваш класс является полиморфным.

1
задан ApplePearPerson 6 March 2019 в 15:02
поделиться

1 ответ

Для useMemo и useCallback (что по сути является просто частным случаем useMemo), если второй аргумент является пустым массивом, значение запоминается один раз и всегда возвращается.

Если второй аргумент опущен, значение никогда не запоминается, а useCallback и useMemo ничего не делают.

Возможно, есть какой-то крайний случай, когда вы можете условно запомнить:

useMemo(someValue, shouldMemoize ? [] : null)

Но в подавляющем большинстве случаев второй аргумент как useMemo, так и useCallback следует считать обязательным. И действительно, определения Typescript относятся к ним таким образом .

// Require a second argument, and it must be an array
function useCallback<T extends (...args: any[]) => any>(callback: T, deps: DependencyList): T;

// Second argument can be undefined, but must be explicitly passed as undefined, not omitted.
function useMemo<T>(factory: () => T, deps: DependencyList | undefined): T;

Существует открытый запрос на извлечение , который расширяет правило exhaustive-deps перехвата хуков, так что он вызовет ошибку lint, если второй аргумент пропущен, так что довольно скоро это будет быть ошибкой линтера.

0
ответ дан Retsam 6 March 2019 в 15:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: