かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Ruby Haml タグやコンテンツが色々入る要素にはまる。 SyntaxError - Illegal nesting

Hamlテンプレートでタグやテキスト要素が混在したコンテンツを作成していてSyntaxErrorになったのでメモ。

エラーになる例

%div 2019411日から
  %strong<> アイカツ!
  が再放送だよ!!
  %a(href="aikatsu")<
    %i.icon-help>
    詳しくはコチラ!

👇

Haml::SyntaxError - Illegal nesting: content can't be both given on the same line as %div and nested within it.

Haml はタグ内の要素はインデントかタグの直後に書くかで併用することができない

中に別のタグが入るようなコンテンツ要素はインデントを揃える必要がある

%div
  2019411日から
  %strong<> アイカツ!
  が再放送だよ!!
  %a(href="aikatsu")<
    %i.icon-help>
    詳しくはコチラ!

👇

<div>
  2019年4月11日から  <strong>アイカツ!</strong>が再放送だよ!!
  <a href="aikatsu"><i class="icon-help"></i>詳しくはコチラ!</a>
</div>

 
pugに似たもんやろ。くらいにしか思ってなかったので何故エラー?って結構ハマってしまいました。
改行のコントロール持っ結構めんどいし… pugって超柔軟だったんだなーって改めて認識。(HamlがあってそこからSlimやpugができたからかもですが


[参考]

これはハム

React JSX コメントを書きたい!

ReactのJSXでコメントを書く方法のメモ

JSX Comment

JSXの{ }の中はJavaScriptが動作するので{ }で囲ってコメントを書くことができる

{/*  一行コメント */}
{/*
  複数行
  コメント
*/}

// も使えるが{ }の閉じタグの前に改行が必要。

{// 一行コメント
}

改行がないと、最後の}コメントアウトされてエラーになる

{// 一行コメント}
// => Parsing error: Unexpected token

JSXの{/**/}コメントアウトはHTML側には出力されない

render(
  <p>コメントアウトは
    {/* ばーかばーか! */}
    HTMLには
    {/*
      ウェーイwwww
      べろべろゔぁあー ⁽⁽ଘ(。•ө•。)ଓ⁾⁾
    */}
     出力されない
  </p>
);

👇

<p>
  コメントアウトは
  HTMLには
  出力されない
</p>

<!-- --> HTMLコメントアウトの出力

JSX上だけにコメントをするのは上記の方法で可能ですが、HTMLコメントを出力するのは少し大変でした。(必要性があるのか?という部分は置いておいて

直接<!-- --> を書くとエラー

render(
<div>
  <!-- comment -->
</div>
);
// => Parsing error: Unexpected token

{<!-- -->}もエラー

render(
<div>
  {<!-- comment -->}
</div>
);
// => Parsing error: Unexpected token

{"<!-- -->"}エスケープされて文字列として出力される。変数にしても同じ

const comment = "<!-- comment -->";
render(
<div>
  {<!-- comment -->}
  {comment}
</div>
);
// 👇
<div>
  &lt;!-- comment --&gt;
  &lt;!-- comment --&gt;
</div>

dangerouslySetInnerHTML={{__html: ""}} を使う

dangerouslySetInnerHTML={{__html: ""}}という構文をDOMエレメントにつければ、そのnode内に__htmlの値が出力されるようです。

render(
  <div dangerouslySetInnerHTML={{__html: '<!-- comment -->'}} />
)

👇

<div>
  <!-- comment -->
</div>

dangerouslySetInnerHTMLを使う際はnode内に要素を記述できないので表示したい要素全てを__htmlの値に渡す必要がある

render(
  <div dangerouslySetInnerHTML={{__html: '<!-- comment -->'}}>
    HTML Comment is here!
  </div>
);
// => Can only set one of `children` or `props.dangerouslySetInnerHTML`.
React.FragmentdangerouslySetInnerHTMLでコメントを付けても出力されない

単にコメントを入れたいだけならReact.Fragment使えばできそうと思ったのですが、出力されませんでした。

render(
  <React.Fragment
    dangerouslySetInnerHTML={{__html: '<p>comment?</p><!-- fragment comment -->'}}
  />
);

👇

 

React.Fragmentそのものは出力されないからDOMを出力後にdangerouslySetInnerHTMLの値をセットするのとができないのからなのかな?と思いました。

e. g.

See the Pen React Comment by KIKIKI (@chaika-design) on CodePen.


[参考]

コメントする力

コメントする力

新しい元号なんてどうでもいい。アイカツ!を観ろ!

春ですねー。

こんにちは。こころに女児を、人生の大切なことはだいたいアイカツ!から学びました。

表題のとおりです。
アイカツを観ましょう。

MXで2019年4月11日 19:00〜 アイカツ!が再放送されますから、
忘れずに履修しましょう。
僕も記憶を消し去って最初から観たい。

  1. アイカツを観れば物語を通して「Team GEEK」で言われるところの HRT (Humility / Respect / Trust)を学ぶことができます。
  2. 次回予告後にある「アイカツ格言」では技術でも絵でも成長に必要なこころを示してくれます。
  3. そして、人生を「これもアイカツだね。」と思うことで困難にもチャレンジできるこゝろを持つことができます。

もっと早くにアイカツ!と出逢っていればよかった。
そんな思いをしてほしくありません。

つまり、アイカツを観ろ!
新しい元号なんてどうでもいい。アイカツを観ろ!

MXが映らない?
dアニメストアに登録すればTVシリーズに加えて映画も見放題です。
つまり、実質無料ですね。
登録してアイカツを観ましょう。

こちらからは以上です。

これがアイカツおじさんの SHINING LINE*.... うんうん。これは串カツだね。


[参考]

劇場版アイカツ! 通常版 [DVD]

劇場版アイカツ! 通常版 [DVD]

Team Geek ―Googleのギークたちはいかにしてチームを作るのか

Team Geek ―Googleのギークたちはいかにしてチームを作るのか