Digamos que eu tenha um botão simples:
Quando clico no botão, o componente de cor muda entre vermelho e azul
Eu poderia alcançar esse resultado fazendo algo assim.
index.js
Button: onClick={()=>{dispatch(changeColor())}}
Color: this.props.color ? blue : red
container.js
connect(mapStateToProps)(indexPage)
action_creator.js
function changeColor(){
return {type: 'CHANGE_COLOR'}
}
reducer.js
switch(){
case 'CHANGE_COLOR':
return {color: true}
mas isso é um monte de código para escrever algo que eu poderia ter alcançado em 5 segundos com jQuery, algumas classes e alguns css ...
Acho que o que realmente estou perguntando é: o que estou fazendo de errado aqui?
javascript
reactjs
redux
l2silver
fonte
fonte
Respostas:
Redux destina-se principalmente ao "estado do aplicativo". Ou seja, qualquer coisa relacionada à lógica do seu aplicativo. A visualização construída sobre ele é um reflexo desse estado, mas não precisa usar exclusivamente esse contêiner de estado para tudo o que faz.
Basta fazer estas perguntas: Esse estado é importante para o restante do aplicativo? As outras partes do aplicativo se comportarão de maneira diferente com base nesse estado? Em muitos casos menores, esse não será o caso. Faça um menu suspenso: O fato de estar aberto ou fechado provavelmente não afetará outras partes do aplicativo. Portanto, conectá-lo à sua loja provavelmente é um exagero. Certamente é uma opção válida, mas não lhe traz nenhum benefício. É melhor você usar
this.state
e encerrar o dia.Em seu exemplo específico, a cor desse botão é alternada para fazer alguma diferença em outras partes do aplicativo? Se for algum tipo de botão liga / desliga global para a maior parte do seu aplicativo, ele definitivamente pertence à loja. Mas se você estiver apenas alternando a cor de um botão ao clicar no botão, poderá deixar o estado da cor definida localmente. A ação de clicar no botão pode ter outros efeitos que requerem um despacho de ação, mas isso é diferente da simples questão de qual cor deveria ser.
Em geral, tente manter o estado do seu aplicativo o menor possível. Você não tem que enfiar tudo lá. Faça-o quando for necessário ou faz muito sentido manter algo lá. Ou se torna sua vida mais fácil ao usar Dev Tools. Mas não sobrecarregue demais sua importância.
fonte
Redux FAQ: Organizing State
esta parte do redux oficial doc respondeu bem a sua pergunta.
fonte
Com o propósito de destacar o ótimo link fornecido por @ AR7, e porque esse link mudou há um tempo:
fonte
Sim, vale a pena se esforçar para armazenar todos os estados dos componentes no Redux . Se o fizer, você se beneficiará de muitos recursos do Redux, como depuração de viagem no tempo e relatórios de bugs reproduzíveis. Caso contrário, esses recursos podem ficar completamente inutilizáveis .
Sempre que você não armazena uma mudança de estado de componente no Redux, essa mudança é completamente perdida da pilha de mudanças Redux e a IU do seu aplicativo ficará fora de sincronia com a loja. Se isso não é importante para você, pergunte-se por que usar o Redux? Seu aplicativo será menos complexo sem ele!
Por motivos de desempenho, você pode querer recorrer a
this.setState()
qualquer coisa que despache muitas ações repetidamente. Por exemplo: armazenar o estado de um campo de entrada no Redux cada vez que o usuário digita uma chave pode resultar em desempenho ruim. Você pode resolver isso tratando-o como uma transação: assim que a ação do usuário for "confirmada", salve o estado final no Redux.Sua postagem original menciona como o método Redux é "um inferno de muito código para escrever". Sim, mas você pode usar abstrações para padrões comuns, como o estado do componente local.
fonte
this.setState()
oudispatch(action...)
. Não é necessário usar emthis.setState()
todos os lugares, mas quando você precisa, minha sugestão é usar Redux em 99% dos casos, caindothis.setState()
para 1% com base em questões de desempenho.