Alguém pode explicar a diferença entre a vinculação de dados unilateral do Reacts e a vinculação de dados bidirecional do Angular
109
Estou um pouco confuso sobre esses conceitos, se eu construir o mesmo aplicativo ToDo completamente em AngularJS e ReactJS --- o que faz o React ToDo usar a vinculação de dados unilateral em vez da vinculação de dados bidirecional do AngularJS?
A entrada começará com teste depois será atualizada anotherem 1000 ms. Quaisquer alterações $scope.name, seja do código do controlador ou alterando a entrada, serão refletidas no log do console 4000 ms depois. As alterações no <input />são refletidas na $scope.namepropriedade automaticamente, já que o ng-modelset up observa a entrada e notifica $scopeas alterações. As alterações no código e no HTML são vinculativas de duas vias . (Veja este violino )
Reagir
O React não possui um mecanismo para permitir que o HTML altere o componente. O HTML só pode gerar eventos aos quais o componente responde. O exemplo típico é usando onChange.
O valor de <input />é controlado inteiramente pela renderfunção. A única maneira de atualizar esse valor é a partir do próprio componente, o que é feito anexando um onChangeevento ao <input />qual é definido this.state.valuecom o método do componente React setState. O <input />não tem acesso direto ao estado dos componentes e, portanto, não pode fazer alterações. Esta é uma ligação unilateral . (Confira este código )
Obrigado, isso foi extremamente informativo. Então eu acho que o Angular funciona mais como UI <----> Data em contraste com Render (dados) do React ---> UI?
WinchenzoMagnifico
Sim, essa é uma maneira muito concisa de colocar isso
Kyeotic
5
Para ser claro, o que distingue a vinculação de dados é que ela faz as atualizações automaticamente . No exemplo React, UI → dados ainda estão acontecendo, mas isso não acontece por padrão - você tem que configurar manualmente o onChangeouvinte e executar handleChange. Mas a partir daí, por causa dos dados de Reagir uma forma de ligação, os dados → atualização UI não acontecer automaticamente.
Adam Zerner
Para sua informação, o violino precisava de uma referência ao AngularJS 1.1.1, acho que a referência ao AngularJS 1.0.1 não era mais válida, estava recebendo um 404. Estranhamente, usar código idêntico em um violino totalmente novo (com uma referência 1.1.1) falha , não sei do que se trata.
Josh Sutterfield
194
Fiz um pequeno desenho. Espero que esteja claro o suficiente. Me avise se não for!
@DamienRoche, tanto quanto eu entendo este conceito, a diferença está a seguir: Em ligação de dados bidirecional: alterando a visualização das mudanças de dados e vice-versa - atualizando a entrada dentro dos dados de atualização da visualização. Fluxo de dados no caminho: atualizar a visualização de atualizações de dados, mas atualizar a entrada na visualização não atualizará os dados, a menos que o programador faça isso explicitamente, anexando o listener à entrada, que atualizará os dados. Espero que isso torne isso um pouco mais claro para você.
Cake_Seller de
2
Obrigado, @Patrick por sua mensagem. Fico sempre muito feliz em sentir que algo que fiz é útil para os outros
Gabriel
link está quebrado @Gabriel você poderia compartilhar a imagem no post?
user3141326
12
A vinculação de dados bidirecional fornece a capacidade de pegar o valor de uma propriedade e exibi-lo na visualização, ao mesmo tempo em que tem uma entrada para atualizar automaticamente o valor no modelo. Você poderia, por exemplo, mostrar a propriedade "tarefa" na visualização e vincular o valor da caixa de texto a essa mesma propriedade. Portanto, se o usuário atualizar o valor da caixa de texto, a visualização será atualizada automaticamente e o valor deste parâmetro também será atualizado no controlador. Em contraste, a associação unilateral apenas vincula o valor do modelo à visualização e não tem um inspetor adicional para determinar se o valor na visualização foi alterado pelo usuário.
Com relação ao React.js, ele não foi realmente projetado para vinculação de dados bidirecional, no entanto, você ainda pode implementar a vinculação bidirecional manualmente adicionando alguma lógica adicional, consulte por exemplo este link . No Angular.JS, a vinculação bidirecional é um cidadão de primeira classe, portanto, não há necessidade de adicionar essa lógica.
onChange
ouvinte e executarhandleChange
. Mas a partir daí, por causa dos dados de Reagir uma forma de ligação, os dados → atualização UI não acontecer automaticamente.Fiz um pequeno desenho. Espero que esteja claro o suficiente. Me avise se não for!
fonte
A vinculação de dados bidirecional fornece a capacidade de pegar o valor de uma propriedade e exibi-lo na visualização, ao mesmo tempo em que tem uma entrada para atualizar automaticamente o valor no modelo. Você poderia, por exemplo, mostrar a propriedade "tarefa" na visualização e vincular o valor da caixa de texto a essa mesma propriedade. Portanto, se o usuário atualizar o valor da caixa de texto, a visualização será atualizada automaticamente e o valor deste parâmetro também será atualizado no controlador. Em contraste, a associação unilateral apenas vincula o valor do modelo à visualização e não tem um inspetor adicional para determinar se o valor na visualização foi alterado pelo usuário.
Com relação ao React.js, ele não foi realmente projetado para vinculação de dados bidirecional, no entanto, você ainda pode implementar a vinculação bidirecional manualmente adicionando alguma lógica adicional, consulte por exemplo este link . No Angular.JS, a vinculação bidirecional é um cidadão de primeira classe, portanto, não há necessidade de adicionar essa lógica.
fonte