2017-10-04 174 views
2

我試圖構建一個按鈕組件,它能夠在元素的子元素之前和之後設置圖標。ReactJS - 有條件地渲染空白

因此,道具是這樣的:

export interface IButtonProps { 
    children?: React.ReactNode; 
    leftIcon?: FontAwesomeIcon; 
    rightIcon?: FontAwesomeIcon; 
} 

FontAwesomeIcon是一個枚舉保持可用的圖標。

在按鈕的render-功能我會檢查是否有圖標集。如果是這樣,則應該有兒童和圖標之間的圖標和空白。

render(): JSX.Element { 
    let { children, leftIcon, rightIcon } = this.props; 

    return (
     <button> 
      {leftIcon && <FontAwesome icon={leftIcon} />} 
      {leftIcon && " "} 
      {children} 
      {rightIcon && " "} 
      {rightIcon && <FontAwesome icon={rightIcon} />} 
     </button> 
    ); 
} 

雖然這個解決方案是工作,我不知道是否有比必須爲一個圖標兩次檢查要設置一個簡單的方法。我也希望能夠使用&nbsp;而不是。 有什麼辦法可以逃避空白,所以我可以寫一些像{leftIcon && <FontAwesome icon={leftIcon} />&nbsp;}

我試圖{leftIcon && <FontAwesome icon={leftIcon} />{"&nsbp;"}}{leftIcon && <FontAwesome icon={leftIcon} />{&nsbp;}}導致

TS1005: '}' 的預期。

+1

你爲什麼不爲這個添加樣式 –

+0

@JigarShah你會介意在你如何添加一個例子w應該完全使用樣式嗎? – KingKerosin

+0

當然,我會嘗試。您可以創建小吃演示 –

回答

0

本文認爲&nbsp;應爲故意空白http://andrewhfarmer.com/how-whitespace-works-in-jsx/

看到工作,你應該能夠插入&nbsp;內嵌我還以爲你不需要把它包起來括號其他HTML或一個字符串。想象一下,就像寫作<br />一樣,你應該可以將它粘貼到<FontAwesome />組件的末尾。

render(): JSX.Element { 
    let { children, leftIcon, rightIcon } = this.props; 

    return (
    <button> 
     {leftIcon && <FontAwesome icon={leftIcon} />&nbsp;} 
     {children} 
     {rightIcon && &nbsp;<FontAwesome icon={rightIcon} />} 
    </button> 
); 
} 

聲明,這是未經測試

作爲替代,這github上的問題https://github.com/facebook/react/issues/1643建議你可以故意空白添加{' '},所以我還以爲這將工作太:

render(): JSX.Element { 
    let { children, leftIcon, rightIcon } = this.props; 

    return (
    <button> 
     {leftIcon && <FontAwesome icon={leftIcon} />{' '}} 
     {children} 
     {rightIcon && {' '}<FontAwesome icon={rightIcon} />} 
    </button> 
); 
} 

免責聲明,也未經測試

+0

第一個給我兩個錯誤。 'TS2362:算術運算的左側必須是'any','number'或枚舉類型,'TS2304:找不到名字'nbsp'。'第二個'TS1005:'}'應該是''。 '。 所以這可能更多地涉及'TypeScript'呢? – KingKerosin

+0

有趣,也許沒有'{}'但用''「'(我只是猜測我害怕無法測試atm) – dougajmcdonald