2016-07-30 12 views
0

Meteor 1.4、Flow Router、Reactを使用して、レイアウトを初期化するためにJavaScriptコードを実行する必要があります。現在、私はこのルートがレンダリングされた後にReactのレイアウトにJavaScriptを適用

FlowRouter.route('/', { 
    name: 'Home', 
    action() { 
    mount(MainLayout, { 
     content: <div>Home</div> 
    }); 
    } 
}); 

を持っていると私はレイアウトのHTMLにこの

$(function() { 
    $('.button-collapse').sideNav(); 
    $('.parallax').parallax(); 
}); 

を実行する必要があります。このコードは、MainLayoutがレンダリングされるたびに実行され、同じレイアウトが他のルートで使用されます(明らかに!)。

レイアウトの初期化コードはどこに置く必要がありますか?

+0

@AbdennourTOUMIの両方を** initialize **と** initialise **は受け入れ可能な英語の文法です。 –

+0

**本当に!**。情報ありがとうございました –

答えて

1

ことはあなたのコンポーネントのcomponentDidMount機能でそれを入れてください:

class MainLayout extends React.Component { 
    componentDidMount() { 
    $('.button-collapse').sideNav(); 
    $('.parallax').parallax(); 
    } 
} 

を...あなたは(子供を含む小道具が変更されたときのような)のアップデートでそれらを再実行する場合を除き:

class MainLayout extends React.Component { 
    componentDidMount() { 
    this.isMounted = true; 
    this.initialiseJQueryWidgets(); 
    } 

    componentDidUpdate() { 
    if (this.isMounted) // In case you're doing server-side rendering 
     this.initialiseJQueryWidgets(); 
    } 

    initialiseJQueryWidgets() { 
    $('.button-collapse').sideNav(); 
    $('.parallax').parallax(); 
    } 
} 
+0

ああ!私のレイアウトは単一の '({content})=>(

foo
)'でした。私はそれを試みます。 –

+0

ステートレス機能コンポーネントには、残念ながらレンダリングライフサイクルフックはありません。 – Jacob

+0

私はレイアウトとして 'Component'を使うことができないと知りました。優れた! –

関連する問題