मैं एक स्क्रिप्ट लिख रहा हूं जो ड्रॉपडाउन की ऊंचाई या स्क्रीन पर इनपुट की स्थिति के आधार पर ड्रॉपडाउन से ऊपर या ऊपर ले जाता है। इसके अलावा, मैं अपनी दिशा के अनुसार मॉडिफायर को ड्रॉपडाउन पर सेट करना चाहता हूं। लेकिन एक अनंत लूप बनाता है (जो स्पष्ट है) के setStateअंदर उपयोग करनाcomponentDidUpdate
मैंने getDOMNodeसीधे ड्रॉपडाउन के लिए क्लासनाम का उपयोग करने और स्थापित करने में एक समाधान पाया है , लेकिन मुझे लगता है कि रिएक्ट टूल का उपयोग करके एक बेहतर समाधान होना चाहिए। कोई भी मेरी मदद कर सकता हैं?
यहाँ काम कोड का एक हिस्सा है getDOMNode(कोड को सरल बनाने के लिए ia थोड़ा सा उपेक्षित स्थिति तर्क)
let SearchDropdown = React.createClass({
componentDidUpdate(params) {
let el = this.getDOMNode();
el.classList.remove('dropDown-top');
if(needToMoveOnTop(el)) {
el.top = newTopValue;
el.right = newRightValue;
el.classList.add('dropDown-top');
}
},
render() {
let dataFeed = this.props.dataFeed;
return (
<DropDown >
{dataFeed.map((data, i) => {
return (<DropDownRow key={response.symbol} data={data}/>);
})}
</DropDown>
);
}
});
और यहाँ सेटस्टेट के साथ कोड है (जो एक अनंत लूप बनाता है)
let SearchDropdown = React.createClass({
getInitialState() {
return {
top: false
};
},
componentDidUpdate(params) {
let el = this.getDOMNode();
if (this.state.top) {
this.setState({top: false});
}
if(needToMoveOnTop(el)) {
el.top = newTopValue;
el.right = newRightValue;
if (!this.state.top) {
this.setState({top: true});
}
}
},
render() {
let dataFeed = this.props.dataFeed;
let class = cx({'dropDown-top' : this.state.top});
return (
<DropDown className={class} >
{dataFeed.map((data, i) => {
return (<DropDownRow key={response.symbol} data={data}/>);
})}
</DropDown>
);
}
});
componentShouldUpdate?
setStateजाएगा हमेशा एक फिर से प्रस्तुत करना ट्रिगर। कई बार चेक करनेstate.topऔर कॉल करने के बजायsetState, केवल उसी चीज़ को ट्रैक करें जिसे आपstate.topस्थानीय वैरिएबल में रखना चाहते हैं , फिरcomponentDidUpdateकॉल के अंत मेंsetStateकेवल एक बार अगर आपका स्थानीय वैरिएबल मेल नहीं खाता हैstate.top। जैसा कि यह अभी खड़ा है, आपstate.topपहले री-रेंडर के तुरंत बाद रीसेट कर देते हैं, जो आपको अनंत लूप में डाल देता है।