Как дать правилу eslint react-hooks / excustive-deps знать, что возвращаемое значение кастомного хука инвариантно?
Когда вы вызываете один из "встроенных" хуков, react-hooks/exhaustive-deps
rule достаточно умен, чтобы распознать, что React гарантирует неизменность некоторых возвращаемых значений. Это относится к средствам обновления состояния и диспетчерам, возвращаемымuseState
а также useReducer
крючки.
В этом первом примере вызов useCallback
не нужно указывать установщик состояния как зависимость:
export const Example1 = () => {
const [date, setDate] = useState(new Date())
const resetDate = useCallback(() => {
setDate(new Date())
}, []) // No need to list any dependency here. No eslint warning.
return (
<>
Date: {date.toISOString()} <button onClick={resetDate}>Reset</button>
</>
)
}
Но во втором примере, где сеттер возвращается с помощью настраиваемой ловушки, он необходим.
const useDateState = (initialValue: Date) => {
return useState(initialValue)
}
export const Example2 = () => {
const [date, setDate] = useDateState(new Date())
const resetDate = useCallback(() => {
setDate(new Date())
}, []) // ESLint complains: React Hook useCallback has a missing dependency: 'setDate'. Either include it or remove the dependency array.
return (
<>
Date: {date.toISOString()} <button onClick={resetDate}>Reset</button>
</>
)
}
Есть ли способ сообщить правилу eslint, что сеттер, возвращаемый моим настраиваемым хуком, не изменится и что ему не нужно указывать его как зависимость? Это поможет удалить код.
Примечание: я прочитал FAQ по React, этот вопрос Stackru и понимаю, что добавление зависимости, которая не изменится, не требует затрат производительности.
Но поскольку такое поведение доступно для встроенных хуков, я хочу знать, есть ли способ получить то же самое для пользовательских хуков.