Özelliklere göre durumlarla ilgili bir sorunla karşılaştım. Özellikler değiştiğinde durumu değiştir ve ilk olarak React - Missing işlevi mi?
senaryo Bir çocuğun bileşenine bir özellik geçer yaratan bir Bileşen ebeveyn var. Çocuk bileşeni alınan mülke göre tepki verir. Reaktif Bir bileşenin durumunu değiştirmek için "yalnızca" uygun şekilde, componentWillMount veya componentDidMount ve componentWillReceiveProps işlevlerini kullandım kadarıyla (diğerlerinin yanı sıra, bunlara odaklanalım, çünkü getInitialState bir kez çalıştırıldı) .
Sorunum/Soru
Ben ebeveynden yeni bir özellik alır ve ben devlet değiştirmek isterseniz, yalnızca işlev componentWillReceiveProps yürütülecek ve bana setstate yürütmek için izin edecektir. Render, setStatus'a izin vermez.
Durumu en baştan ve yeni bir özellik aldığında ayarlamak istersek ne olur? Bu yüzden, getInitialState veya componentWillMount/componentDidMount üzerinde ayarladım. Sonra componentWillReceiveProps kullanarak özelliklerine bağlı olarak durumu değiştirmeniz gerekir.
Durumunuz, mülkünüzün özelliklerine bağlı olduğu için hemen hemen her zaman bir sorun yaratıyor. Aptal hale gelebilir çünkü yeni mülke göre güncellemek istediğiniz durumları tekrarlamanız gerekir.
Çözümümün
Ben componentWillMount ve componentWillReceiveProps üzerinde deniyor yeni bir yöntem oluşturduk. Bir özelliğin, oluşturulmadan önce ve Bileşenin ilk kurulduğunda güncellenmesinden sonra herhangi bir yöntem bulunamadı. O zaman bu aptalca çözümü yapmaya gerek kalmayacaktı.
Her neyse, burada soru: yeni bir özellik alındığında veya değiştirildiğinde durumun güncellenmesi için daha iyi bir seçenek yok mu?
/*...*/
/**
* To be called before mounted and before updating props
* @param props
*/
prepareComponentState: function (props) {
var usedProps = props || this.props;
//set data on state/template
var currentResponses = this.state.candidatesResponses.filter(function (elem) {
return elem.questionId === usedProps.currentQuestion.id;
});
this.setState({
currentResponses: currentResponses,
activeAnswer: null
});
},
componentWillMount: function() {
this.prepareComponentState();
},
componentWillReceiveProps: function (nextProps) {
this.prepareComponentState(nextProps);
},
/*...*/
ben biraz aptal hissediyorum, bir şey kaybetmeden ediyorum galiba ... Bunu çözmek için başka bir çözüm yoktur sanırım .
Ve evet, ben zaten bunu biliyor: Bu model genellikle çok gerekli olmadığını tespit ettik https://facebook.github.io/react/tips/props-in-getInitialState-as-anti-pattern.html