2017-07-25 59 views
0

我有以下功能組件,我有興趣知道如何將其更改爲branch增強組件,而不是if聲明。如何將此功能反應組件更改爲使用重構的組件?

import React from 'react' 
import PropTypes from 'prop-types' 
import { Button, Icon, Label } from 'semantic-ui-react' 
import { Link } from 'react-router-dom' 
import { setPropTypes, branch } from 'recompose' 

const LoginOrMiniProfile = ({presence}) => { 
    if (presence.account) { 
     return (
      <Link to='/profile'> 
       <Label> 
        <Icon name='user circle outline' /> 
        {presence.account.firstName} 
       </Label> 
      </Link> 
     ) 
    } else { 
     return (
      <div> 
       <Button primary className={`login ${presence.loading && 'loading'}`}>Signup</Button> 
       <Button className={`login ${presence.loading && 'loading'}`}>Login</Button> 
      </div> 
     ) 
    } 
} 

export default setPropTypes({ 
    prensence: PropTypes.object.isRequired 
})(LoginOrMiniProfile) 

而加分,怎麼會使用重新構圖訪問,並在終極版存儲更改presence

回答

0

下面是一個快速實現你想要的例子。你可以(也應該)做一些重構,比如在其他地方定義內聯函數組件。

compose(
    connect(
    ({ presence }) => ({ presence }), // get presence from the redux store via `connect` 
    { 
     updatePresence: updatePresenceActionCreator // inject dispatch(updatePresence) to props 
    } 
), 
    setPropTypes({ 
    prensence: PropTypes.object.isRequired, 
    updatePresence: PropTypes.func.isRequired 
    }), 
    branch(
    ({ presence }) => presence.account, 
    renderComponent(({ presence }) => 
     <Link to="/profile"> 
     <Label> 
      <Icon name="user circle outline" /> 
      {presence.account.firstName} 
     </Label> 
     </Link> 
    ) 
) 
)(({ 
    presence, 
    updatePresence // you can update your presence by invoking this function 
}) => 
    <div> 
    <Button primary className={`login ${presence.loading && "loading"}`}> 
     Signup 
    </Button> 
    <Button className={`login ${presence.loading && "loading"}`}>Login</Button> 
    </div> 
); 
+0

我沒有提到它,但存在由父組件設置。我認爲我所遇到的問題是以這種方式理解使用'branch'的意思是「渲染基本組件,除非已設置,否則渲染傳入的組件」。我期待着一個if-then-else與'branch'的語義顯性。我想我現在對重新構建有了更好的理解。謝謝! – Dallas

+0

@達拉斯我很高興我的回答是幫助:) – wuct

相關問題