码迷,mamicode.com
首页 > 其他好文 > 详细

Controller View 模式

时间:2017-12-11 23:04:57      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:return   port   free   fun   通过   tco   ext   span   div   

参考:https://blog.andrewray.me/the-reactjs-controller-view-pattern/

Flux参考:http://www.cnblogs.com/hellohello/p/8024263.html

创造一个顶层组件来管理所有的state,并把这些state通过props传递给子组件。如

class HomePageController extends React.Component {
    componentDidMount() {
        Store1.on(‘change‘, this.onStoreChange);
        Store2.on(‘change‘, this.onStoreChange);
    }
    onStoreChange() {
        this.setState({
            data1: Store1.getData(),
            data2: Store2.getData()
        });
    }
    render() {
        // <HomePage /> has no internal state!
        return <HomePage
            data1={this.state.data1}
            data2={this.state.data2} />;
    }
}

以上是store的更新事件处理方式,不理解的可以查看以上flux链接。

 

像上面这样提取一个顶层的controller有什么好处?

  有了controller,可以更加灵活地组合使用组件。

  一般情况下,一个页面有一个 <ShoppingCartView /> ,里面直接监听了 ShoppingCartStore。但以后如果需要一个页面有多个 <ShoppingCartView />,分别监听不同的 ShoppingCartStore,那就只能抽取一个ShoppingCartController出来,如下:

class ShoppingCartController extends React.Component {  
    ...
    // You get component portability for free!
    render() {
        return <div>
            <ShoppingCart data={store1Data} />
            <ShoppingCart data={store2Data} />
        </div>;
}

在以上的controller中就可以很简单的组合多个组件来使用了。

以上被组合的组件中没有state,即无状态组件(通过function创建)。

 

Controller View 模式

标签:return   port   free   fun   通过   tco   ext   span   div   

原文地址:http://www.cnblogs.com/hellohello/p/8025215.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!