Estou criando um gancho personalizado com um toogle quando algum estado muda.
Você deve conseguir passar qualquer estado em uma matriz.
import { useState, useEffect } from 'react'
const useFlatListUpdate = (dependencies = []) => {
const [toggle, setToggle] = useState(false)
useEffect(() => {
setToggle(t => !t)
}, [...dependencies])
return toggle
}
export default useFlatListUpdate
E deve ser usado como
const toggleFlatList = useFlatListUpdate([search, selectedField /*, anything */])
Mas isso me dá o seguinte aviso
O React Hook useEffect possui um elemento de dispersão em sua matriz de dependências. Isso significa que não podemos verificar estaticamente se você passou pelas dependencies.eslint corretas (react-hooks / exaustive-deps)
Eu também tenho outra situação em que não funciona
const useFlatListUpdate = (dependencies = []) => {
const [toggle, setToggle] = useState(false)
useEffect(() => {
setToggle(t => !t)
}, dependencies)
return toggle
}
Isso me dá o aviso
React Hook useEffect recebeu uma lista de dependências que não é uma matriz literal. Isso significa que não podemos verificar estaticamente se você passou pelas dependencies.eslint corretas (react-hooks / exaustive-deps)
Como posso fazer isso funcionar sem o aviso e sem desativar o eslint?
fonte
useEffect(() => { setToggle(t => !t) }, [dependencies])
Respostas:
O uso da lista de dependências é muito peculiar neste caso.
Não vejo outra maneira, exceto ignorar ou silenciar o aviso.
Para silenciar o aviso, não precisamos desativar
eslint
completamente.Você pode desativar esta regra específica para esta linha específica:
fonte