質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

4834閲覧

React.js ◯◯.jsx render() { return内にて変数に代入したhtmlタグが文字列として認識されてしまう

kazuyu

総合スコア18

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2017/05/25 15:07

編集2017/05/25 15:40

【知りたいこと】
1. htmlタグを代入した変数を文字列ではなく、htmlタグとして認識させる方法を知りたい。
2. 例えば表示したいhtmlタグが、<div>・・・</div>であった場合で、条件により外側に<a href="・・・"></a>を加えたい場合、以下のような重複する冗長なコード以外の書き方を避けた書き方を知りたい。

if (条件A) { <a href="・・・"><div>・・・</div></a> } else { <div>・・・</div> }

【躓いているところ】
React.jsのrender内のreturn内にて、{htmlタグを代入した変数}を
{◯◯}と記載するとhtmlタグとして認識せず、文字列として認識されてしまいます。
【具体的なコード 以下◯◯.jsx】

・・・ render () { var htmlTag = null; if (条件A) { htmlTag += <a href="・・・"> } htmlTag += <div>・・・</div> if (条件A) { htmlTag += </a> } return (<div> {htmlTag} </div> ); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそもそのコード、ちゃんとトランスパイルできますか?Babelでちょっと試したところ、エラーになるのですが、あってますか?

まず、JSX表記について、これはHTMLに書ける方法であってHTMLを直接書ける訳ではありません。<a href="・・・">は「<a href="・・・">」というHTMLを書いているわけではないのです。

例えば、下記のコードは

JavaScript

1var a = ( 2 <a href="#"> 3 <span> 4 <img src="abc.png"/> 5 </span> 6 </a> 7);

下記のように変換されます。

JavaScript

1var a = React.createElement( 2 "a", 3 { href: "#" }, 4 React.createElement( 5 "span", 6 null, 7 React.createElement("img", { src: "abc.png" }) 8 ) 9);

Babelでどうなるかを実際に見てみると良いでしょう。

意識すべきは、変換後のコードがどうなるかです。変換後のコードを見ればわかるとおり、開始タグと終了タグはセットであり、分離できません。開始タグから終了タグまでは通常のJavaScriptではありません。開始タグだけ用意して、後から終了タグを付けることはできません。

コードを書き直すのであれば、開始タグと終了タグを分離しないようにすべきでしょう。

JavaScript

1var htmlTag; 2if (条件A) { 3 htmlTag = ( 4 <a href="・・・"> 5 <div>・・・</div> 6 </a> 7 ); 8} else { 9 htmlTag = <div>・・・</div>; 10}

投稿2017/05/27 21:58

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuyu

2017/05/28 05:11

記載コードは、部分部分抜粋して記述したものなので コンパイルはしていません。 助言及び丁寧な開設ありがとうございます。 タグを分離しての代入は不可とのプロからの事実確認ができただけも 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問