2017-06-12 10 views
8

クラス内にコンポーネントを書き込むのではなく、それらがダムであるためです。私は主にこれらを関数の中に記述します。しかし、componentDidMount、componentWillMount機能コンポーネントをどのように上書きするのですか?それも可能ですか?機能内のReactJSライフサイクルメソッド

const grid = (props) => { 
    console.log(props); 
    let {skuRules} = props; 

    const componentDidMount =() => { 
     if(!props.fetched) { 
      props.fetchRules(); 
     } 
     console.log('mount it!'); 
    }; 
    return(
     <Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}> 
      <Box title="Sku Promotion"> 
       <ActionButtons buttons={actionButtons} /> 
       <SkuRuleGrid 
        data={skuRules.payload} 
        fetch={props.fetchSkuRules} 
       /> 
      </Box>  
     </Content> 
    ) 
} 
+0

私は理由が質問や答えをdownvotingのために提供されるべきだと思います。 –

+0

私はそれは良い質問だと思っていますが、授業中の注意は個人的な意見であり、下降投票を得ているかもしれません:) – Joehannes

+0

それはREACTコミュニティがそれを呼んでいる方法です:-) –

答えて

7

機能コンポーネントのプロパティは、彼らが反応するライフサイクル機能へのアクセスやthisキーワードを持っていないということです。ライフサイクル機能を使用する場合は、React.Componentクラスを拡張する必要があります。あなただけの余分なロジックを必要とせずに、あなたのコンポーネントをレンダリングしたい場合

class Grid extends React.Component { 
    constructor(props) { 
     super(props) 
    } 

    componentDidMount() { 
     if(!this.props.fetched) { 
      this.props.fetchRules(); 
     } 
     console.log('mount it!'); 
    } 
    render() { 
    return(
     <Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}> 
      <Box title="Sku Promotion"> 
       <ActionButtons buttons={actionButtons} /> 
       <SkuRuleGrid 
        data={skuRules.payload} 
        fetch={props.fetchSkuRules} 
       /> 
      </Box>  
     </Content> 
    ) 
    } 
} 

機能コンポーネントが便利です。

+0

私が言ったように、コンポーネントにロジックがあり、ライフサイクル機能を使用する必要があり、functioanlコンポーネントでそれを行うことはできません。だから、クラスをうまく活用する。コンポーネントに余分なロジックが含まれていない場合には、機能コンポーネントを使用してください –

+0

あなたの答えはより精巧です。説明してくれてありがとう。 –

+0

喜んで助けてください:)、私は説明することができた嬉しい –

3

React LifeCycleを使用する必要がある場合は、Classを使用する必要があります。

サンプル:

import React, { Component } from 'react'; 

class Grid extends Component { 

constructor(props){ 
    super(props) 
} 

componentDidMount() { /* do something */ } 

render() { 
    return <h1>Hello</h1> 
} 

} 
+0

私はクラスを使用したくないです。 –

+1

しかし、componentDidMountはクラスでしか動作しません:/ –

+1

hmmは感謝します。 –

3

あなたは、機能コンポーネントにライフサイクル機能を追加するためにreact-pure-lifecycleを使用することができます。

例:

import React, { Component } from 'react'; 
import lifecycle from 'react-pure-lifecycle'; 

const methods = { 
    componentDidMount(props) { 
    console.log('I mounted! Here are my props: ', props); 
    } 
}; 

const Channels = props => (
<h1>Hello</h1> 
) 

export default lifecycle(methods)(Grid); 
関連する問題