2017-02-07 1 views
0

私はmenuItemコンポーネントを持っていて、その小道具はアイコンというアイコンで作成されました。文字列を[オブジェクトオブジェクト]に変換する方法

menuItem小道具では、アイコンの名前を文字列として渡すことができます(例:leftIcon="face")。leftIcon='<FontIcon style={{color:"red"}} className="face" />'のようにコンポーネントのコードを渡すこともできます。

leftIcon = <FontIcon size={_props.fontSize} className={_props.leftIcon} />;

しかし、この第二の方法では動作しません。最初のケースで

は、すべてが完璧に動作し、小道具は、コンポーネントのコードがある変数に渡されます。ユーザーは、私がこれまで(上記のように、このサイズの値を)何かを追加する必要があるすべてのコードを渡し、この時点で、これは作品を追加する場合:

leftIcon = _props.leftIcon.replace(/\/>$/, " size={_props.fontSize}/>");

をここで私は、ユーザーが合格したかどうか確認するためにifを持っています:

if (_props.leftIcon.match(/<.+\/>/)) { 
    leftIcon = _props.leftIcon.replace(/\/>$/, " size={_props.fontSize}/>"); 
} else { 
    leftIcon = <FontIcon size={_props.fontSize} className={_props.leftIcon} />; 
} 

しかし、この2番目の方法では、私は文字列を取得しているし、動作しません。アイコンはありませんが、コードの文字列があります:

enter image description here

だから私はこれを慰めログきたし、それは私が得たものです:

enter image description here

typeofこの最初はですオブジェクトですが、この2番目は文字列です。

このように2番目の方法で動作させるにはどうすればよいですか?

答えて

0

このコードがレンダリング部分にある場合、これはうまくいくはずです。

if (_props.leftIcon.match(/<.+\/>/)) { 
 
    leftIcon = _props.leftIcon.replace(/\/>$/, " size={_props.fontSize}/>"); 
 
} else { 
 
    leftIcon = (<FontIcon size={_props.fontSize} className={_props.leftIcon} />); 
 
}

括弧に注意してください。

+0

残念なことに、この作業部分を試したので、この最初の 'if'は文字列では機能しません。 – Karol

+0

私はあなたが小道具としてそれを渡していたことを逃しました。その場合は、型を小道具として渡し、残りをmenuItemで処理する必要があります。 –

+0

申し訳ありませんが、「プロップとしてタイプを渡してください」という意味を理解できません。 – Karol

0

ではなく、文字列をコンポーネントにスタイルおよび/またはクラス名とその他のパラメータを渡すためにあなたがthis answer

に見てみることができます。しかし、私はあなたを示唆している文字列からコンポーネントを作成する方法がありますし、その後、あなたは可能性

return <FontIcon class={condition ? 'firstClass' : 'secondClass'} ... />; 
関連する問題