2016-03-10 16 views
10

React'ın DOM/Bileşenlerini aldığını fark etmenin bir yolu var mı? Değişiklikleri, kullanıcının değişiklikleri geri alabilmesi için saklı tutmaya çalışacağımı hayal edebilirim [ve kişisel olarak, rehinenin altında yatan farkın (belki de değişmiş olan bileşenlere sahip olacak mı?)] Ilgilenmesiyle ilgileniyorum.React üzerinde fark yaratın React

DÜZENLEME: Geri alma özelliği sadece bir örnekti. Sadece yeni ve eski bir ağaç farklılığı yaptığı için yukarıdakilerin React'tan çıkarıp alınamayacağıyla ilgileniyorum.

+0

* "bu kadar kullanıcı değişiklikleri 'geri al' olabilir gerçekleşmesi gibi değişiklikleri saklamak için çalışıyorum." * Yerine app/bileşenin durumunun anlık tutun. Sonra "geri al" sadece önceki durumu yükler. Bana neden ** DOM ** 'nin bir farkını isteyeceksin gerçekten açık değil. –

+0

Uygulamanın/bileşenin kendisi ağaç benzeridir - sadece izlemeye devam etmek çok kolay olurdu, çünkü her halükarda takip etmek istiyorum, belki de başka amaçlar için bilgi depolayın. Aksi halde ayrı bir fark oluşturmam gerekecek, ancak içeri girip bu bilgiyi alabilseydim; Potansiyel olarak yararlı olabilir. – Cenoc

cevap

7

Ben bu kadar kullanıcı değişiklikleri 'geri al' olabilir gerçekleşmesi değişiklikleri saklamak için çalışıyorum

Bunu gerçekleştirmek için nasıl Teklifim:

sonucu kılmak tepki sadece dayanmalıdır devletler. İki kez aynı durumu verirseniz, DOM aynı olmalıdır. Muhtemelen çocuk bileşenleri vatansız olmalı.

componentWillUpdate yöntem sahne ve eyaletlerde değişikliklerden sonra çalıştırılır.

Herhangi bir durum değişikliğinden sonra durumu kopyalayıp kaydedebilirsiniz.

Ve kullanıcı eğer

değişiklikler o anda geçerli devlet olarak eski kaydedilen durumuna set 'geri al'.

Ve DOM, önceki durumla aynı olmalıdır. redux-undo birlikte

+3

Anlaşıldı, React ile hedefiniz DOM'yi değiştirmek veya DOM durumuyla ilgili endişelenmenize gerek kalmamakta, bunun yerine verilerinizin durumuyla ilgileniyorsunuz ve DOM bu durumdan deterministik olarak işleniyor. – tt9

+0

@ krzysztof-sztompka Bu konuda hemfikir olmakla birlikte, sanal DOM ile ilgileniyorsanız, benim sorum bakış açımından soruyor. Farkın, DOM bileşenlerinin değil, bileşenlerden oluşacağını hayal ediyorum. – Cenoc

+0

Bakış açınızı anlıyorum, fakat cevabım içinde size bu sorunda React şekilde yardımcı olmaya çalıştım. Reaksiyonla çalışmak, tepki için sanal dom bırakmalıyız. Sanal domu manipüle etmek bile mümkün olup olmadığını bilmiyorum. –

0

Kullanım Redux sen/yeniden geri alma işlevi istiyorum.

0

sorunuza cevap için: DOM diff olsaydı düşünün Muhtemelen, ama bu

gibi yapmak gerekir, o zaman DOM ayrıştırmak ve anlamaya olurdu hangi dom, sahne ve devletin farklı kısımlarına eşlenmiş değişiklikler.

Thats dağınık.

var SomeComponent = React.createClass({ 
    onChange: function(newData){ 
    currentState = _.clone(this.state.currentState) 
    previousChanges = this.state.previousChanges.concat([currentState]) 

    this.setState({ 
     currentState: newData, 
     previousChanges: previousChanges 
    }) 
    }, 

    undo: function(){ 
    previousChanges = _.clone(this.state.previousChanges) 
    currentState = previousChanges.pop() // removes last item and returns it 

    this.setState({ 
     currentState: currentState, 
     previousChanges: previousChanges 
    })  
    }, 
    render: function(){ 
    <div> 
     <SomeAwesomeThing 
     currentState={this.state.currentState} 
     onChange={this.onChange} 
     onUndo={this.undo} 
     /> 
    </div> 
    } 
}) 

Temelde Güncel verilere bir işaretçi tutmak ve her değişiklik kolayca döndürülebilir değişiklikler listesine gerekiyor.