2017-04-27 6 views
2

Ich erhalte die folgende WarnungKann nur aktualisieren, eine Montage oder Befestigungskomponente

Warnung: setState (...): nur ein bereitgestelltes oder Montage Komponente aktualisieren. Dies bedeutet normalerweise, dass Sie setState() für eine nicht bereitgestellte Komponente aufgerufen haben. Dies ist ein No-Op. Bitte überprüfen Sie den Code für die undefinierte Komponente .

dies ist mein Code

var React = require('react'); 
import DetectUtil from 'pofod/detectUtil'; 
function withSubscription(WrappedComponent,MobileComponent) { 
    class Subscription extends React.Component{ 
     constructor(props){ 
      super(props); 
      this.state={ 
       ExternalComponent:innerWidth>1023?WrappedComponent:MobileComponent 
      } 
      this.getPageLangParams=this.getPageLangParams.bind(this); 
      this.MonitorSize = this.MonitorSize.bind(this); 
     } 
     getPageLangParams() { 
      var query=this.props.location?(this.props.location.query?this.props.location.query:{}):{}; 
      var lang=this.props.lang||query.lang||DetectUtil.languageFamily()||'zh'; 
      return lang; 
     } 
     MonitorSize(){ 
      this.setState({ 
       ExternalComponent:innerWidth>1023?WrappedComponent:MobileComponent 
      }) 
     } 
     componentDidMount(){ 
      window.addEventListener('resize',this.MonitorSize) 
     } 
     componentWillMount(){ 
      window.removeEventListener('resize',this.MonitorSize) 
     } 
     render(){ 
      let lang = this.getPageLangParams(); 
      let ExternalComponent = this.state.ExternalComponent; 
      return (
       <ExternalComponent lang={lang}/> 
      ) 
     } 
    } 
    return Subscription; 
} 

module.exports = withSubscription; 

Antwort

1

Sie verwirrt componentWillMount und componentWillUnmount.

EventListener wird auf ComponentWillMount entfernt, aber Sie sollten es entfernen, bevor Sie z. KomponenteWillUnmount.

Wenn die Komponente abgehängt wird, stoppt die MonitorSize die Triggerung. Hier ist, wie es sein sollte:

componentWillUnmount(){ 
    window.removeEventListener('resize',this.MonitorSize) 
} 
Verwandte Themen