2016-07-21 22 views
3

私はReactを使ってブログを作成中です。私はブログのメインコンテンツをサーバーから持ち帰り、Props/State経由でReact Componentに渡す予定です。React Stateでhtmlタグを渡す正しい方法は何ですか?

  • BLOCKQUOTE
  • H2及びH3
  • IMG、ビデオ、埋め込みコードなどなど

私は、データベース内のブログの内容を保存するために期待していた/ JSON:ブログの内容は以下のようなHTMLタグを持つことができますこれらのタグと共にファイルを読み込み、ページの読み込み時にコンテンツをそのままレンダリングします。 しかし、Reactでそれをするのは難しいようです。

  1. dangerouslySetInnerHTML
  2. (配列に文字列のコンテンツをプッシュすることは動作しません)フォームの配列オブジェクト内のコンテンツ[HTMLコンテンツ]を保存する:我々はこれを実現することができる3つの方法があります。
  3. すべてのHTMLエンティティにユニコード文字を渡します。

この質問かなりよく、これらのアプローチを議論:

Rendering raw html with reactjs

私のクエリは、次のとおりです。

  1. は、これを処理するために、すべてのフロー/アーキテクチャ上でそこに変更されるべきか?
  2. コンポーネントを反応させるためにajax呼び出しから大きなhtmlコンテンツを挿入する最も良い方法は何ですか?
  3. 完全に機能的で動的/スケーラブルなブログを作成するには、どのような設計上の決定を考慮する必要がありますか?
  4. ブログコンテンツ(一部のファイル/データベースに保存されています)などの動的コンテンツでSEOを取得する方法。 ?
+0

まずはhtmlを直接データベースに保存しないでください。htmlエンティティに変換する必要があります(セキュリティ上の理由から、ユーザーの入力からhtmlを受け入れるべきではありません)!あなたがjsonファイルについて話しているなら、最善の方法はありません...私は 'dangerouslySetInnerHTML'(私の個人的な意見)と一緒に行くでしょう –

+0

@Nishanth Mathaどうやってstackoverflowのようなサイトは(HTMLコンテンツを追加しますか?定義された方法はありますか?ここで私はユーザーの入力を考慮していません。私はブログを書いてUIに表示したいと考えています。 –

+0

@AnilSharmaかなりのstackoverflow htmlは内容をデータベースに追加する前にエンコードします。次に、それを表示するときにそれをデコードします。 – jzm

答えて

3

dangerouslySetInnerHTMLには特別なものはありません。 HTMLのソースに応じて、Reactを使用するかどうかに関係なく、javascriptからのHTMLのレンダリングは常に危険です。たとえば、自分で作成してデータベースに保存した投稿をレンダリングする場合、(データベースが侵害されていない限り)危険はありません。しかし、投稿にコメントがあり、ユーザーが悪質なコードをコメントとして送信したとします。そのページにアクセスする他のすべてのユーザーは、データベースから悪意のあるコードを取得し、ブラウザ上で「危険に」実行します。だから、あなたがしなければならないのは、データベースに保存する前にユーザー入力を消毒して、HTMLのソースが安全であることを確認することです。 「あなたはドンので、あなたは、あなたがURLで利用できる必要なすべての情報を持っていることを確認しhttps://www.smashingmagazine.com/2016/03/server-side-rendering-react-node-express/

- SEOについてhttp://htmlpurifier.org/

、サーバー・サイド・レンダリングを使用することができます - あなたはそれを達成するために使用できるライブラリ、サンプルがあります。投稿IDなどのようなページをレンダリングするために "状態"に頼ることはできません。リアクタを使って達成することができます - https://github.com/reactjs/react-router

+0

@Hugoご返信ありがとうございます。そのまさに私は今何をしているのですか。これをやりながら、私は他のブログの仕組みや、コンテンツ指向のサイトを扱うための良い方法を知りたがっていました。私はクライアント側のレンダリングとJSON APIからのblogコンテンツデータの取得のためにリアクタを使用しています。これはReactコンポーネントに動的にロードされ、次に 'dangerouslySetInnerHTML'を使用して設定されます。私は将来サーバサイドのレンダリングを使うかもしれない。 (私はそれのために大きなファンではないが)。 –

+0

htmlタグでdangerouslySetInnerHTMLが機能していません。 React [link](https://facebook.github.io/react/)のホームページ上で作業していません。タイプ

これが見出しです。

関連する問題