var rawMarkup = marked(this.props.children.toString(), {sanitize: true});
React シリーズ 1 の学習-React-チュートリアルの完全な分析_html/css_WEB-ITnose
React チュートリアルのサンプルの完全な分析
Talk is easy, Show me the code
最近 React に注目しています React の学習方法については、リンク先の記事を参照して独自の計画を立てることができます。 。千マイルも一歩から始まります。この記事は、React の公式チュートリアルからの例であり、詳細に学習することで、そこから多くのことを学び、進捗状況をみんなと共有するためにここにメモしました。
始めましょう
-
サンプルをダウンロードして解凍します
-
ノード環境により、ダウンロードして解凍した後は、それが配置されているディレクトリで実行するだけで済みます
npm installnode server.js
ログイン後にコピー -
デフォルトのポート設定は、ブラウザを開いて http://localhost:3000/ にアクセスしてください。
ディレクトリ構造の説明
react-tutorial
--node_modules --body-parser:express中间件,用于接收和解析json数据 --express:express框架--public --css --base.css:基本样式文件 --scripts -- example.js:React应用js文件 index.html:基本的HTML结构--.editorconfig:用于在不同的编辑器中统一编辑风格(文件编码)的配置文件--.gitignore:git相关配置文件--app.json:web app的相关信息--comments.json:上传的评论数据--LICENSE:项目代码使用协议--package.json:项目所依赖的包,npm install的安装包的配置文件--README.md:项目说明书,里面有使用说明--requirements.txt:不清楚--server.js:服务器端的js代码
アプリ関数
このプロジェクトは、図に示すような単純なアプリケーションを構築します
サーバー側
サーバー側の機能は比較的単純で、コードコメントの形式で分析されます
- 依存モジュールをインポートします
var fs = require('fs'); //读写文件var path = require('path'); //路径var express = require('express'); //express框架var bodyParser = require('body-parser'); //中间件
ログイン後にコピー - アプリを生成して設定します
//获取comments.json文件的路径var COMMENTS_FILE = path.join(__dirname, 'comments.json');//设置端口app.set('port', (process.env.PORT || 3000));//设置静态文件的文件目录路径app.use('/', express.static(path.join(__dirname, 'public')));//启用bodyParser中间件接收请求,并且接收并解析json数据app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: true}));
ログイン後にコピー - レスポンスヘッダー情報を設定する
app.use(function(req, res, next) { //允许跨域 CORS res.setHeader('Access-Control-Allow-Origin', '*'); //缓存设置 res.setHeader('Cache-Control', 'no-cache'); next();});
ログイン後にコピー - 取得リクエストURLに対応した処理関数を設定(コメントJSONデータを取得)
app.get('/api/comments', function(req, res) { //读取comments.json文件,并且解析为json数据 fs.readFile(COMMENTS_FILE, function(err, data) { if (err) { console.error(err); process.exit(1); } //读取成功后,返回 res.json(JSON.parse(data)); });});
ログイン後にコピー - 投稿リクエストURLに対応した処理関数を設定(コメントデータを送信)
app.post('/api/comments', function(req, res) { //先读取comments.json文件 fs.readFile(COMMENTS_FILE, function(err, data) { if (err) { console.error(err); process.exit(1); } //将文件内容解析为json数据 var comments = JSON.parse(data); //获取新评论 var newComment = { id: Date.now(), author: req.body.author, text: req.body.text, }; //添加json数组中 comments.push(newComment); //将json数据写回到comments.json文件中,并且返回全部的评论数据 fs.writeFile(COMMENTS_FILE, JSON.stringify(comments, null, 4), function(err) { if (err) { console.error(err); process.exit(1); } res.json(comments); }); });});
ログイン後にコピー - スタート、ポートでリッスンしてください
app.listen(app.get('port'), function() { console.log('Server started: http://localhost:' + app.get('port') + '/');});
ログイン後にコピー
Web 側の中核は、example.js ファイルにあり、公式 Web サイトの情報と組み合わせて、このアプリケーションを分析し、単純な反応アプリケーションを構築する方法を学びます。
コンポーネント構造
React は Web コンポーネントの概念を実装しています。コンポーネント開発方法に従って、このアプリケーションのコンポーネント構造を分析してみましょう (図に示すように):
つまり:
-- CommentBox -- CommentList -- Comment -- CommentForm
//评论人{this.props.author}//评论的内容{this.props.children}
コメントは MarkDown 構文をサポートしているため、ユーザーが入力したコンテンツを処理するには、マークされたサードパーティ ライブラリを使用する必要があります。
var rawMarkup = marked(this.props.children.toString(), {sanitize: true});
ログイン後にコピー
var rawMarkup = marked(this.props.children.toString(), {sanitize: true});
また、出力内容は HTML に解析する必要があり、デフォルトでは XSS 攻撃防止の考慮に基づき、React は出力内容を HTML に解析しません。この時点では、特殊な属性危険なセットインナーHTMLを使用する必要があります。コンテンツをオブジェクトの _html 属性に配置し、このオブジェクトを危険なほどセットインナーHTML属性に割り当てる必要があります。このとき、第 1 レベルのコンポーネント CommentBox によって渡されるデータが生成されます。データに基づいて複数のサブコンポーネント コメント
- サブコンポーネント コメントを生成するとき、各サブコンポーネントのキー属性を comment.id に設定します。これは、キーがオプションの一意の識別子であるためです。コンポーネントに一意のキーを設定し、そのキーがレンダリング サイクル全体にわたって一貫していることを保証することで、React がコンポーネントを再利用するか破棄して再作成するかをよりインテリジェントに決定できるようになり、レンダリング パフォーマンスが向上します。
- コンポーネント CommentForm が行う必要があることは 2 つです
- 自身の状態 this.state (つまり、フォームに入力されたコメンテーターとコメントの内容) を管理する
var html = {_html:"输出的html内容"};<span dangerouslySetInnerHTML={html} />
フォームが送信されるとき
submit イベントがトリガーされると、上位層コンポーネント CommentBox のイベント処理関数が呼び出され、コンポーネント CommentBox の状態が変更されます。
- ここで注目に値する点があります。それは、抽象カスタム イベント commentSubmit と実際のイベント submit の間の接続です。これは非常に実用的なテクニックであり、それがどのように機能するかは次の章で説明します。
var Comment = React.createClass({ rawMarkup : function() { var rawMarkup = marked(this.props.children.toString(),{sanitize:true}); return {_html : rawMarkup}; //React的规则,会读取这个对象的_html内容, }, render : function() { return ( <div className="comment"> <h2 className="commentAuthor"> {this.props.author} </h2> <span dangerouslySetInnerHTML={this.rawMarkup()} /> </div> ); }});
ログイン後にコピー- コンポーネント CommentBox
-
- コンポーネント CommentBox
- 新しいコメント データをサーバーにアップロードする
var CommentList = React.createClass({ render : function() { var commentNodes = this.props.data.map(function(comment){ return ( <Comment author={comment.author} key={comment.id}> {comment.text} </Comment> ); }); return ( <div className="commentList"> {commentNodes} </div> ); }})
- りー

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

GiteEpages静的Webサイトの展開が失敗しました:404エラーのトラブルシューティングと解像度Giteeを使用する
