Реагируйте хуками useMemo, false как зависимость - PullRequest
2 голосов
/ 24 сентября 2019

Недавно я столкнулся с каким-то странным использованием хука useMemo:

const memo = useMemo(callback, false);

В качестве второго аргумента вместо зависимости передается false.

Это допустимый код?В документации React говорится, что зависимость должна быть массивом.Какова цель использования false?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

second argument из useMemo - это список зависимостей, который сообщает React, когда следует запоминать value снова (пересчитывать) каждый раз, когда изменяется одна из этих зависимостей.Простая передача false или любое другое значение, которое не является literal array, выдаст eslint-warning, потому что React не сможет статически проверить зависимости, переданные с теми, которые находятся внутри списка зависимостей.Ваш код будет выполняться без ошибок, но будет эквивалентен

useMemo(() => cb())

, что просто

cb()

Так что нет, нет цели использовать useMemo без arrayзависимостей (вызывает запоминаемое значение, которое меняет каждый рендер, вообще не запоминается)

0 голосов
/ 25 сентября 2019

На самом деле я проанализировал реакцию-реконсилер, и оказалось, что приведенный выше код эквивалентен этому:

const memo = useMemo(callback, []);

Это из-за причуд JavaScript, где:

false.length = undefined;
false[1] = undefined;

Такследовательно:

undefined === undefined // true
...