iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 28
0
Modern Web

React.js & Laravel 30天訓練系列 第 28

【Day 28】How to embed component in Semantic Ui Tab and Trigger it render

空白了幾天 今天完成了一個項目 就是我們有一個頁面連結底下 會區分出三個副頁面
因此我們要用 Semantic Ui Tab 來做區分

OK 那就開始囉

<div>
    <h3>
    {
      this.props.AllDiscs.filter(x => x.get('DiscID') == this.props.params.discid).getIn(['0', 'discussion_info', 'DiscName'])
    }
    </h3>

    <Menu attached='top' tabular>
        <Menu.Item key='write' 
                   active={this.state.activeItem === 'inprocess'}>
            <Icon name='write' size="large"></Icon>{t('InProcess')}
        </Menu.Item>
        <Menu.Item key='finished' 
                   active={this.state.activeItem === 'finished'}>
            <Icon name='checkmark' size="large"></Icon>{t('Finished')}
        </Menu.Item>
        <Menu.Item key='attachments' 
                   active={this.state.activeItem === 'attachment'}>
            <Icon name='attach' size="large"></Icon>{t('Attachments')}
        </Menu.Item>
    </Menu>

    <Segment attached='bottom'>
    {(() => {
            switch(this.state.activeItem) 
            {
                case 'inprocess': return <InProcessPage discid={this.props.params.discid}></InProcessPage>;
                case 'finished': return <FinishedPage discid={this.props.params.discid}></FinishedPage>;
                case 'attachment': return <AttachPage discid={this.props.params.discid}></AttachPage>;
            }
        }
    )()}
    </Segment>
</div>

你可能會覺得很奇怪 不是說要用 Tab 嗎 怎麼變成 Menu
原因是這樣的 我發現 Semantic 的 Tab 就是利用 Menu去做組合的
而且我覺得他組合起來 並沒有很好用 pane function 有點定死的感覺 而且都寫在 const 裡面
這種寫法我不喜歡

然後 重點來了 以前我都是把 跟後端要資料的方法 透過
componentWillMount()
componentDidMount()
去做呼叫

但是你在 同一個component 底下只是URL 的 Param 變化時 這一招就會無效
因為這個只有在 component 初始化的時候做一次 之後就罷工了
所以 我們做了些改變

shouldComponentUpdate(nextProps, nextState) {
   return true;
}

componentWillReceiveProps(nextProps) {
if (this.props.IsLogin && nextProps.discid !== this.props.discid) {
      let _compid = this.props.CompID;
      let _userid = this.props.UserID;
      let _token = this.props.Token;
      let _discid = nextProps.discid;
      this.props.onGetInProcess(_compid, _discid, _userid, _token);   
   }
}

我們透過 prop 設定 因為 我們把

this.props.param.discid

傳送到 component prop
所以我們就可以根據這個 來做Component 變化的通知了


上一篇
待補
下一篇
待補
系列文
React.js & Laravel 30天訓練30

尚未有邦友留言

立即登入留言