反應元件容器

在構建 React 應用程式時,通常需要根據元件的主要職責將元件劃分為 Presentational 和 Container 元件。
表示元件僅涉及顯示資料 - 它們可以被視為並且通常被實現為將模型轉換為檢視的功能。通常,它們不保持任何內部狀態。容器元件與管理資料有關。這可以通過他們自己的狀態在內部完成,也可以作為 Redux 等狀態管理庫的中介。容器元件不會直接顯示資料,而是將資料傳遞給表示元件。

// Container component
import React, { Component } from 'react';
import Api from 'path/to/api';

class CommentsListContainer extends Component {
    constructor() {
        super();
        // Set initial state
        this.state = { comments: [] }
    }

    componentDidMount() {
        // Make API call and update state with returned comments
        Api.getComments().then(comments => this.setState({ comments }));
    }

    render() {
        // Pass our state comments to the presentational component
        return (
            <CommentsList comments={this.state.comments} />;
        );
    }
}

// Presentational Component
const CommentsList = ({ comments }) => (
    <div>
        {comments.map(comment => (
            <div>{comment}</div>
        )}
    </div>
);

CommentsList.propTypes = {
    comments: React.PropTypes.arrayOf(React.PropTypes.string)
}