Reacts tek yönlü veri bağlama ile Angular'ın iki yönlü veri bağlama arasındaki farkı herkes açıklayabilir mi?


109

Bu kavramlar konusunda biraz belirsizim, eğer aynı ToDo uygulamasını tamamen AngularJS ve ReactJS'de oluşturursam - React ToDo'nun AngularJS'nin iki yönlü veri bağlamasına kıyasla tek yönlü veri bağlamayı kullanmasını sağlayan nedir?

React'in şu şekilde çalıştığını anlıyorum:

Oluştur (veri) -> UI.

Bunun Angular'dan farkı nedir?

Yanıtlar:


165

Açısal

Açısal kurulumlar veri bağlayan iki "izleyici" mevcut olduğunda (bu bir basitleştirmedir)

//js
$scope.name = 'test';
$timeout(function()  { $scope.name = 'another' }, 1000);
$timeout(function()  { console.log($scope.name); }, 5000);

<!-- html --->
<input ng-model="name" />

Giriş ile başlayacak test, ardından another1000 ms olarak güncellenecektir . $scope.nameDenetleyici kodundan veya girişi değiştirerek yapılan herhangi bir değişiklik , 4000 ms sonra konsol günlüğüne yansıtılacaktır. Değişiklikler <input />yansıtılır $scope.nameberi, otomatik özelliği ng-modelsetleri yukarı giriş ve bildirebilmesi saatler $scopedeğişikliklerin. Koddaki değişiklikler ve HTML'deki değişiklikler iki yönlü bağlamadır . ( Bu kemana bir bak )

Tepki

React, HTML'nin bileşeni değiştirmesine izin veren bir mekanizmaya sahip değildir. HTML yalnızca bileşenin yanıt verdiği olayları oluşturabilir. Tipik bir örnek kullanmaktır onChange.

//js
render() { 
    return <input value={this.state.value} onChange={this.handleChange} />
}
handleChange(e) {
    this.setState({value: e.target.value});
}

Değerinin değeri tamamen işlev tarafından <input />kontrol edilir . Bu değeri güncellemenin tek yolu , React bileşen yöntemiyle ayarlanan bir olayın eklenmesiyle gerçekleştirilen bileşenin kendisidir . O değişiklik yapamazsınız böylece bileşenler devlete doğrudan erişime sahip olurlar ve gelmez. Bu tek yönlü bağlayıcıdır . (Bu kod parçasına göz atın )renderonChange<input />this.state.valuesetState<input />


9
Teşekkürler, bu son derece bilgilendiriciydi. Sanırım Angular, React'in Render (veri) ---> UI'sinin aksine UI <----> Data gibi çalışıyor?
WinchenzoMagnifico

Evet, bu çok kısa ve öz bir açıklama yolu
Kyeotic

5
Açık olmak gerekirse, veri bağlamanın ayırt edici özelliği, güncellemeleri sizin için otomatik olarak yapmasıdır . Örnek Tepki, UI → veriler hala varsayılan olarak olmaz bu sadece var, oluyor - sen elle kurmak zorunda onChangedinleyici ve koşmak handleChange. Ama çünkü en Tepki tek yönlü veri, oradan UI güncellemesi → veriler, bağlama yok otomatik olarak gerçekleşir.
Adam Zerner

Bilginize, keman, AngularJS 1.1.1'e bir referansa ihtiyaç duyuyordu, sanırım AngularJS 1.0.1'in referansı artık geçerli değildi, 404 alıyordu. , bunun ne hakkında olduğunu bilmiyorum.
Josh Sutterfield

194

Küçük bir çizim yaptım. Umarım yeterince açıktır. Değilse bana bildirin!

2 yollu veri bağlama VS 1 yollu veri bağlama


21
'Titre de l'annonce' nedir?
ghd

6
Fransızca 'Reklam başlığı'
timelf123

14
@DamienRoche Bu kavramı anladığım kadarıyla aradaki fark şudur: İki yönlü veri bağlama: verileri değiştirmek görünümü değiştirir ve bunun tersi - görünüm içindeki girişi güncelleme verileri günceller. Yolda veri akışı: veri güncellemeleri görünümünü güncelleme ancak görünümdeki girişi güncelleme, programcı verileri güncelleyecek olan girişe dinleyici ekleyerek bunu açıkça yapmadıkça verileri güncellemeyecektir. Umarım bu, sizin için biraz daha netleşir.
Cake_Seller

2
Teşekkürler, mesajınız için @ Patrick. Yaptığım bir şeyin başkaları için yararlı olduğunu hissetmekten her zaman çok mutluyum
Gabriel

bağlantı kopuk @Gabriel gönderideki görseli paylaşır mısınız?
user3141326

12

İki yönlü veri bağlama, bir mülkün değerini alma ve görünümde görüntüleme yeteneği sağlarken aynı zamanda modeldeki değeri otomatik olarak güncellemek için bir girişe sahip olur. Örneğin, görünümde "görev" özelliğini gösterebilir ve metin kutusu değerini aynı özelliğe bağlayabilirsiniz. Bu nedenle, kullanıcı metin kutusunun değerini güncellerse, görünüm otomatik olarak güncellenecek ve bu parametrenin değeri de denetleyicide güncellenecektir. Buna karşılık, tek yönlü bağlama, yalnızca modelin değerini görünüme bağlar ve görünümdeki değerin kullanıcı tarafından değiştirilip değiştirilmediğini belirleyen ek bir izleyiciye sahip değildir.

React.js ile ilgili olarak, gerçekten iki yönlü veri bağlama için tasarlanmamıştır, ancak yine de bazı ek mantık ekleyerek iki yönlü bağlamayı manuel olarak uygulayabilirsiniz, örneğin bu bağlantıya bakın . Angular.JS'de iki yönlü bağlama birinci sınıf bir vatandaştır, bu nedenle bu ek mantığı eklemeye gerek yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.