私は、うまく設計されたボックス、すなわちDIVの束の中にテキストを表示する単純なプレゼンテーションコンポーネントを持っています。私のコンポーネントは、3つの小道具:header
,displayText
およびisHtml
を期待しています。HTMLを含む場合とそうでない場合がある小包を扱う
時々、displayText
に単純なテキストをプロポーズし、ハイパーリンクなどのHTMLを含むものを渡す必要があります。
例えば、私はHello World!
または<a href="http://www.google.com">Click for Google</a>
をdisplayText
小道具に渡すことができます。 HTMLをdisplayText
に渡すと、isHtml
はTRUE
に設定されます。
私がいる問題はPropType
がdisplayText
ためstring
に設定されていることですが、私は、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
};
ここでHTMLを送信するのIF私のコンポーネント宣言が親JSX
コンポーネントの内部のようになります。
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を送信していますか? HTMLの代わりにdisplayTextでJSXタグを送信していると思います。 – Panther
元の投稿の一番下にセクションを追加しました。私のコンポーネントにデータをどのように送るかを見てください。だから、あなたは私がHTMLではなくJSXを送信していると言っていると思います。 HTMLを送信する必要があるときは、私の例のように常にgetMyText()のような関数を呼び出します。単純なテキストを送る場合は、単に 'displayText = {this.props.someProp}'のようなことをします。だから、これをどう扱うかわからない。 – Sam
オブジェクトの形状は何ですか?オブジェクトがhtmlのとき – Chris