2016-08-01 16 views
10

Có cách nào để sử dụng tính năng ES6 extend với bộ phận React-Router "withRouter" không?Có cú pháp ES6 cho React-Router HOC/withRouter không?

Something như thế này:

import { withRouter } from 'react-router'; 

export default class extends withRouter { 
    ... 
    //Use react router history prop to navigate back a page. 
    handleSomeEvent() { 
    this.props.router.goBack(); 
    } 
    ... 
} 

Hoặc tôi đang mắc kẹt bằng cách sử dụng mô hình thành phần cũ?

var MyComponent = React.createClass({ 
    ... 
}); 
export default withRouter(MyComponent); 

Trả lời

12

Vâng, thật dễ dàng, xem dưới đây (không nói rằng bạn nên chuyển hướng 2s sau khi thành phần đã được gắn ... chỉ là ví dụ).

BTW phiên bản của tôi về phản ứng-router là 2,6 (2.4+ cần thiết cho withRouter)

import React, { Component } from 'react'; 
import { withRouter } from 'react-router'; 

class MyComponent extends Component { 
    componentDidMount() { 
     setTimeout(() => { 
      this.props.router.push('my-url') 
     }, 2000); 
    } 

    render() { 
     return (
      <div>My Component</div> 
     ); 
    } 
} 

export default withRouter(MyComponent); 
+0

Tôi đoán đây là gần nhất cho đến nay. Tôi không nghĩ đến việc sử dụng bố cục cùng với một lớp học có tên. Tôi đã hy vọng cho "MyComponent lớp mở rộng withRouter' nhưng tôi nghĩ rằng điều này sẽ làm cho bây giờ. –

+0

nó có thể trông điên rồ, nhưng nó hoạt động tốt. tôi thậm chí sử dụng nó kết hợp với redux và với thành phần bậc cao hơn "điều khiển phép" của tôi 'kết xuất mặc định kết nối (mapStateToProps, {fetchCampaigns}) (AuthorizedComponent (Chiến dịch));' –

+0

@MarekJalovec Trong ví dụ của bạn trong nhận xét bạn sẽ đặt withRouter? Nó sẽ là: 'xuất mặc định kết nối (mapStateToProps, {fetchCampaigns}) (AuthorizedComponent (withRouter (Chiến dịch));' –

3

Bạn có thể sử dụng nó như thế này.

@withRouter 
export default class extends withRouter { 
    ... 
    //Use react router history prop to navigate back a page. 
    handleSomeEvent() { 
    this.props.router.goBack(); 
    } 
    ... 
} 

Nhưng bạn sẽ phải bao gồm babel-plugin-transform-decorators-legacy

Các vấn đề liên quan