eu tb me peguei nessa duvida a pouco tempo atras, nao sou super experiente no assunto, mas eu venho percebendo que muito das vezes existe uma forma de fazer que nao precisa de um gerenciador de estado global
casos comuns que achei que precisavam mas talvez nao:
-
controlled inputs, aqueles inputs que voce define o value dele como sendo um estado, ai o value recebe o estado, e OnChange do input define o estado consequentemente reflete no value do input. Eu troquei isso pelo react-hook-form, alem de evitar um renderização a cada letra digitada, é muuuito menos verboso e muito mais facil de lidar.
-
precisar clonar um resposta da api pra manipular internamente, eu passei a fazer isso pelo controle e invalidamento de cache do react query, e quando percebo que vou ter muito tralbalho para passar essa cache à um componente, eu so faço outra chamada e segue e vida
-
precisar clonar todo um array de dados e alterar algumas informações, como uma lista filtrada, que existe a original e existe a filtrada, aprendi que pode ser criado um estado derivado, ou seja, eu posso criar uma variavel que armazena uma variação dessa estado, sem necessariamente guardar ele em outro estado, e isso salva vidas, ex:
const [users, setUsers] = useState<User[]>([])
const filteredUsers = users.filter(user => user.id === id)
Mas eu uso redux para comunicação de estados entre componentes, como por exemplo, qual estado de filtro minha lista ta? talvez outro componente precisa saber pra mudar algum estilo ou algo do tipo...
O principal motivo pelo qual uso redux é a tipagem, eu nao sei tipar os payloads do useReducer, a forma de tipar o redux é bem mais simples, por isso uso ele, acho bem mais organizado