我有一個簡單的表示性組件,它在一個設計良好的盒子裏顯示文本,即一堆DIV。我的組件預計有三個道具:header
,displayText
和isHtml
。處理可能包含或不包含HTML的道具
有時,我需要傳遞給我的displayText
prop簡單文本和其他時間的東西,其中包含HTML,如超鏈接。
例如,我可以將Hello World!
或<a href="http://www.google.com">Click for Google</a>
傳遞給displayText
支柱。每當我通過HTML到displayText
,isHtml
設置爲TRUE
。
我遇到的問題是,PropType
設置爲string
爲displayText
但如果我用HTML標籤發送文字,它成爲一個object
,我得到一個錯誤說道具收到object
但期待string
。
我該如何處理這個scneario?
我的組件看起來是這樣的:
const MyComponent = ({ header, displayText, isHtml }) => {
const renderHtml =() => {
return { __html: displayText }
}
return (
<div className="my-fancy-classes">
<span className="some-more-fancy-classes">{header}</span>
{isHtml
? <div className="some-class" dangerouslySetInnerHTML={renderHtml()} />
: <div className="some-class">{displayText}</div>
}
</div>
);
}
MyComponent.propTypes = {
header: PropTypes.string.isRequired,
displayText: PropTypes.string.isRequired,
isHtml: PropTypes.bool.isRequired
};
這裏就是我的組件聲明看起來像父JSX
組件內部IF發送HTML:
getMyText() {
let displayText = "";
if(this.props.isHtml)
displayText = '<a href="http://www.google.com">Click for Google</a>';
return displayText;
}
...
<div>
<MyComponent header="Title" displayText={this.getMyText()} isHtml={true} />
</div>
如果我發送簡單的文本,它會看起來像這樣:
<div>
<MyComponent header="Title" displayText={this.props.someProp} isHtml={false} />
</div>
您正在發送HTML或JSX?我相信你在displayText而不是HTML中發送JSX標籤。 – Panther
我在原始帖子的底部添加了一個部分。請看我如何將數據發送到我的組件。所以,我想你說我發送的是JSX,而不是HTML。無論何時我需要發送HTML,我都會像在我的例子中一樣調用一個像getMyText()這樣的函數。如果我發送簡單文本,我只需要執行一些操作,例如'displayText = {this.props.someProp}'。所以,不知道如何處理這個。 – Sam
物體的形狀是什麼?當它是html的對象 – Chris