2015-09-22 2 views
11

मैं रेक्टजेएस के लिए नया हूं और एक साधारण परियोजना पर अपने हाथों की कोशिश कर रहा था। असल में, स्निपेट एक सरणी से दोस्तों की एक सूची बनाते हैं और दोस्तों की कुल संख्या प्रदर्शित करता है।अधिकतम कॉल स्टैक ReactJS में त्रुटि से अधिक है। क्या कोई यह समझाने में मदद कर सकता है कि क्या हो रहा है? (JSFiddle पर स्निपेट)

किसी कारण से, मुझे एहसास हुआ कि incrementFriendsCount समारोह एक "अधिकतम कॉल स्टैक को पार कर त्रुटि" फेंकता है जब मैं एक नए दोस्त

नीचे कोड स्निपेट भी available on JSFiddle है जोड़ें।

var HelloUser = React.createClass({ 
 
    getInitialState: function() { 
 
    return { 
 
     name: "Toyosi", 
 
     friends: ["Susanna", "Jibola", "Worreva"], 
 
     friendsCount: 0 
 
    } 
 
    }, 
 
    addFriends: function(friend) { 
 
    this.setState({ 
 
     friends: this.state.friends.concat([friend]) 
 
    }); 
 
    }, 
 
    componentWillMount: function() { 
 
    this.setState({ 
 
     friendsCount: this.state.friends.length 
 
    }); 
 
    }, 
 
    incrementFriendsCount: function() { 
 
    this.setState({ 
 
     friendsCount: this.state.friends.length 
 
    }); 
 
    }, 
 
    render: function() { 
 
    return (<div> 
 
     Villain: { 
 
     this.state.name 
 
     }, No of friends: { 
 
     this.state.friendsCount 
 
     } < br/> 
 
     < AddingTheFriend addNew = { 
 
     this.addFriends 
 
     } 
 
     incCount = { 
 
     this.incrementFriendsCount 
 
     } 
 
     /> 
 
     <ListFriends enemies={this.state.friends}/> 
 
     < /div> 
 
    ); 
 
    } 
 
}); 
 

 
var ListFriends = React.createClass({ 
 
    propTypes: { 
 
    \t enemies: React.PropTypes.array.isRequired 
 
    }, 
 
    render: function() { 
 
    \t var allFriends = this.props.enemies.map(function(friend){ 
 
     \t return <li>{friend}</li > ; 
 
    }); 
 

 
    return (<div> Her evil friends: 
 
    <ul> { 
 
     allFriends 
 
    } < /ul> 
 
      </div > 
 
) 
 
} 
 
}); 
 

 
var AddingTheFriend = React.createClass({ 
 
     getInitialState: function() { 
 
     return { 
 
      newFriend: '' 
 
     } 
 
     }, 
 
     propTypes: { 
 
     addNew: React.PropTypes.func.isRequired 
 
     }, 
 
     updateNewFriend: function(change) { 
 
     this.setState({ 
 
      newFriend: change.target.value 
 
     }); 
 
     }, 
 
     addTheFriend: function() { 
 
     this.props.addNew(this.state.newFriend); 
 
     this.setState({ 
 
      newFriend: '' 
 
     }) 
 
     }, 
 
     componentWillReceiveProps: function() { 
 
     this.props.incCount(); 
 
     }, 
 
     render: function() { 
 
      return (<div> 
 
      < input type = "text" 
 
      value = { 
 
       this.state.newFriend 
 
      } 
 
      onChange = { 
 
       this.updateNewFriend 
 
      } 
 
      /> 
 
       <button type="button" onClick={this.addTheFriend}>Add Friend</button > 
 
      < /div> 
 
     ) 
 
    } 
 
}); 
 
React.render(<HelloUser/> , document.getElementById('app'));
<script src="http://fb.me/react-js-fiddle-integration.js"></script> 
 

 
<div id="app"></div>

अगर कोई क्यों इस त्रुटि फेंक दिया जाता है के बारे में अधिक प्रकाश फेंक सकता है मैं सराहना करेंगे।

+0

यह मेरे लिए ठीक काम कर रहा है। एकमात्र चेतावनी जो मैं देख रहा हूं वह 'क्लासनाम' के संबंध में है (देखें: https://facebook.github.io/react/docs/jsx-in-depth.html#html-tags-vs.-react-components) – pmilla1606

उत्तर

18

आप componentWillReceiveProps जो माता-पिता घटक और प्रभाव की स्थिति सेट हो जाएगा कि AddingTheFriend फिर से प्रदान की गई है में this.props.incCount बुला रहे हैं, और this.props.incCount फिर कहा जाता है। इसलिए ढेर अतिप्रवाह।

एक और सलाह यह होगी कि आम तौर पर आप सावधान रहना चाहते हैं और जितना संभव हो सके उतने कम से कम setState का उपयोग करें। बस मित्रों को गिनती करें जब आप नए दोस्त को मूल घटक के राज्य में जोड़ते हैं।

यहां codepen है - मेरी राय में JSFiddle से काफी बेहतर है।

+0

धन्यवाद @romseguy। आपका समाधान अच्छी तरह से काम करता है। मैंने इस कोड के बिना कोड में एक रिफैक्टर देखा .ref। मैं वर्तमान समाधान को बेहतर समझता हूं। रेंडर फ़ंक्शन से पहले 'सेटस्टेट की कॉल' की संख्या को कम करने के लिए यहां मेरा सबसे बड़ा लेना है। – Olatoyosi

10

वही त्रुटि उत्पादन के साथ लोगों के लिए एक भविष्य में संदर्भ के रूप में उपयोग करते समय प्रतिक्रिया: की तुम दोनों

  • webpack-देव-सर्वर के साथ अपने अनुप्रयोग चलाने यह त्रुटि हो जाएगा --गर्म
  • नई webpack.HotModuleReplacementPlugin()

तो: जब आप hotModuleReplacementPlugin अपने webpack config में सक्षम किया है --गर्म साथ अपने सर्वर चलाने के लिए और भी तो आप स्थिति है कि अपने घटकों रिकर्सिवली अपडेट करेगा, इस प्रकार जीन में मिल जाएगा ओपी का उल्लेख किया गया त्रुटि संदेश वास्तव में रेटिंग।

सरल समाधान: दो चीजों में से एक को छोड़ दें, उदा। "--hot" को छोड़ दें क्योंकि आप इसके लिए प्लगइन का उपयोग कर चुके हैं।

0

मेरे मामले में यह एक अनंत लूप था, या यदि आपको एक स्पष्ट तार्किक त्रुटि पसंद है।

संबंधित मुद्दे