2016-10-19 3 views
0

このコンポーネントから離れてナビゲートすると問題が発生します。このエラーが発生します:warning.js:36 Warning:setState(...) : "マウントされたコンポーネントまたはマウントされているコンポーネントのみをアップデートできます。これは通常、アンマウントされたコンポーネントに対してsetState()を呼び出したことを意味します。今私は、コンポーネントがDOMからアンマウントされる直前に呼び出されます」と述べcomponentWillUnmountのためのドキュメント上で見てきました。componentWillUnmount&Warning:setState(...):error

をこの方法で必要なクリーンアップを実行し、そのようなタイマーを無効にするか、任意のDOM要素をクリーンアップするよう

componentDidMountで作成されたものです。

問題は私がそれを行う方法を知らないということです。私は他のスタックオーバーフローの例を見てきましたが、私はそれらを理解していないし、それを理解することはできません。私がそれをする方法を理解するのに十分な例はないようです。私はライフサイクルを理解していますが、私はそれをどのように実行するのか分かりません。ここで

は私のコードです:

import React from 'react'; 
import jQuery from 'jquery'; 
import $ from 'jquery'; 

import ProjectsHeaderLinks from "./ProjectsHeaderLinks.jsx"; 

export default class ProjectsHeader extends React.Component { 

    constructor() { 
     super() 
     this.state = { 
      class: "not-sticky-div", 
      class2: "hidden-span", 
      class3: "false" 
     } 
    } 



    componentDidMount() { 
     this.scrollTop(); 

    } 

    componentWillUnmount(){ 
     this.scrollTop = null; 
     console.log("unmounted"); 
    } 


    scrollTop(){ 
     var that = this; 
     let head = $(".header"); 
     let stick = "sticky"; 
     let projHead = document.getElementById("projHead"); 
    $(window).scroll(function() { 
     $(window).scrollTop() > 400 
      ? head.addClass(stick) 
      : head.removeClass(stick); 
     let newValue = projHead.classList.value.split(' ', 2); 
     for (var i = 0; i < newValue.length; i++) { 
      newValue[i] === "sticky" 
       ? that.setState({class: "sticky-div", class2: "visible-span", class3: "true"}) 
       : that.setState({class: "not-sticky-div", class2: "hidden-span", class3: "true"}); 
      } 
     }) 
    } 



    render() { 
     return (
      <div id="projHead" className="header"> 
       <div className={this.state.class}> 
       {this.state.class === "not-sticky-div" 
       ? <div>"This is My Projects Page" --Lonnie McGill</div> 
       : <div> <ProjectsHeaderLinks/> </div> 
      } 
       </div> 
      </div> 
     ) 
    } 
} 
+1

をあなたは部品がマウント解除されたときに '$(ウィンドウ).scroll'ハンドラをバインド解除する必要があります。 – zerkms

+0

私にそれを表示することはできますか? –

+0

http://stackoverflow.com/q/4154952/251311 - これは「jquery unbind scroll」リクエストのGoogleによる最初の結果です – zerkms

答えて

1

問題を解決するために置く:

componentWillUnmount(){ 
    $(window).unbind("scroll"); 
} 
関連する問題