#reactjs #typescript
#reactjs #typescript
Вопрос:
https://codesandbox.io/s/wandering-wildflower-764w4
По сути, я пытаюсь сделать следующее:
У меня есть функция проверки сервера, которую я высмеял в примере. Я хотел бы сохранить состояние локально, чтобы на входе отображалось вводимое значение. Когда он будет проверен, я хочу, чтобы он запускал событие onChange.
Но каким-то образом я получаю бесконечный цикл, и я не понимаю, почему.
Ответ №1:
Вы получаете бесконечный цикл, потому что вы передаете onChange
свойство таким образом:
onChange={(v) => setMap((m) => ({ ...m, [key]: v }))}
Это означает, что ссылка props.onChange
на будет меняться каждый раз. Итак, useEffect
внутренняя AddressInput
часть будет вызываться при каждом рендеринге.
В свою очередь, useEffect
вызовы props.onChange()
, которые запускают одно и то же useEffect
, и цикл повторяется снова и снова.
Чтобы избежать бесконечного цикла, вам нужно сохранить ссылку на свойство типа функции с помощью useCallback
хука.