2017-06-12 20 views
8

Thay vì viết các thành phần của tôi bên trong một lớp, vì chúng câm. Tôi chủ yếu viết những thứ này bên trong một hàm. Nhưng làm thế nào để ghi đè lên componentDidMount, các thành phần chức năng componentWillMount? Thậm chí có thể không?ReactJS vòng đời bên trong một thành phần chức năng

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

Tôi nghĩ rằng một lý do cần được cung cấp cho downvoting một câu hỏi hoặc một câu trả lời. –

+0

Tôi nghĩ rằng đó là một câu hỏi hay, mặc dù ghi chú trên lớp là ngu ngốc là một ý kiến ​​cá nhân và có thể đã giành được lợi nhuận sau: – Joehannes

+0

Đã hiểu, nhưng đó là cách cộng đồng REACT gọi nó :-) –

Trả lời

7

Thuộc tính của các thành phần chức năng là chúng không có quyền truy cập vào chức năng vòng đời phản ứng hoặc từ khóa this. Bạn cần mở rộng lớp React.Component nếu bạn muốn sử dụng chức năng vòng đời.

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> 
    ) 
    } 
} 

Các thành phần chức năng hữu ích khi bạn chỉ muốn kết xuất thành phần của mình mà không cần thêm logic.

+0

Như tôi đã nói, bạn có một logic trong thành phần của bạn và bạn yêu cầu bạn muốn sử dụng một chức năng vòng đời và bạn không thể làm điều đó với các thành phần functioanl. Vì vậy, tốt hơn làm cho việc sử dụng của lớp. Sử dụng thành phần chức năng khi thành phần của bạn không chứa thêm logic –

+0

Câu trả lời của bạn phức tạp hơn. Cảm ơn vì đã giải thích. –

+0

Vui lòng trợ giúp :), Rất vui được tôi giải thích –

3

Nếu bạn cần sử dụng React LifeCycle, bạn cần sử dụng Class.

mẫu:

import React, { Component } from 'react'; 

class Grid extends Component { 

constructor(props){ 
    super(props) 
} 

componentDidMount() { /* do something */ } 

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

} 
+0

Tôi không muốn sử dụng lớp học. –

+1

Nhưng, componentDidMount chỉ hoạt động trong lớp:/ –

+1

hmm có ý nghĩa cảm ơn bạn. –

3

Bạn có thể sử dụng react-pure-lifecycle để thêm chức năng vòng đời cho các thành phần chức năng.

Ví dụ:

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); 
Các vấn đề liên quan