前のチュートリアルでは、IoT デバイスのプロトタイプを作成し、PubNub のデータフロー ネットワークを使用してハードウェア センサーからデータの視覚化を作成する方法を説明しました。このチュートリアルでは、PubNub と React.js (DOM を非常に効率的に操作できるようになります) および次世代 JavaScript ES6 を使用して、リアルタイムの共同作業 Web アプリケーションを構築する方法を説明します。
ライブ デモンストレーション: コラボレーション付箋
同じ付箋アプリの 2 つのバージョンを作成しました。1 つは CDN でホストされる React バージョンを使用して CodePen でホストし、もう 1 つはパッケージ マネージャーを使用して GitHub でホストします。このチュートリアルでは、後者の「lite」バージョンを使用しています。 npm、webpack、Babel for JSX、ES6 などの優れた機能をすべて使用してアプリを構築する方法を説明します。
前提条件
続行するには、次のものが必要です:
-
<li>React の基本的な理解
<li>依存関係をダウンロード、インストール、管理するための npm パッケージ マネージャーを理解する
<li>Webpack モジュール ビルダーについての実用的な知識を取得します。Webpack モジュール ビルダーは、ブラウザ用の JavaScript とその他のリソースをバンドルします (grunt や gulp と同様に機能します)
<li> コンピューターにインストールされている Node.js と npm
###あなたは何をしているの######
次に、PubNub を使用して単純な Web アプリケーションを構築します。 PubNub は、リアルタイム アプリケーションと IoT デバイスを簡単に構築および拡張できるようにするグローバル インフラストラクチャを提供するデータ ストリーミング ネットワーク (DSN) です。ここでは、共有可能な「付箋」を作成します。アプリケーションのユーザー フローは次のとおりです:
ユーザーログイン。
ユーザーが名前を入力すると、アプリケーションは最後の 50 個のメモ (存在する場合) を取得します。
-
<li>
<li>ユーザーはノートボードに内容を入力し、Enter キーを押して送信します。
<li>新しい付箋は、お使いのブラウザおよび現在オンラインになっている他のすべてのブラウザに他の付箋とともに表示されます。
<li> さあ、始めましょう!
ソフトウェア パッケージをインストールします
アプリのディレクトリで npm init
を実行して package.json ファイルを設定し、モジュールをインストールします。
フロントエンドの静的リソースをコンパイル、連結、縮小、圧縮する webpack モジュール ビルダーをインストールします。
webpack Web サーバーをインストールしてローカル サーバーを実行します:
React、React DOM、および CSS アニメーション アドオンをインストールします:
JSX と ES6 を使用するには Babel をインストールします。次世代 JavaScript であるコンパイラ Babel を利用して ES6 (ES 2015) で記述します。 $ sudo npm install babel-loader babel-core babel-preset-es2015 babel-preset-react --save
リアルタイム通信のために PubNub をインストールします:
アプリケーション構造と Web サーバーの構成
次のようなアプリケーション構造を作成します: <p>
リーリー
</p>
そして
webpack.config.js:
を設定します リーリーこの GitHub リポジトリにある構成ファイル全体を表示します。 基本的には、エントリ ポイント ファイル (トップレベル ファイル) と出力先を設定し、webpack コマンドを実行すると、すべての js (および .jsx) ファイルが 1 つのファイルに組み込まれます。さらに、
watch: trueを設定すると、webpack がファイルの変更を監視し、出力ファイルを自動的に再構築するようにすることができます。
index.html ファイルを作成します
index.html ファイルにスクリプト bundle.js
を含めます:
リーリー また、本文内の
id="container"を持つ要素にも注意してください。ここに React アプリケーションが挿入されます。
Webpack開発サーバーを実行する
次のコマンドを使用して開発サーバーを実行できます:
$ ./node_modules/.bin/webpack-dev-server
または、次の行を追加して package.json に設定することもできます:
したがって、
npm startコマンドを使用してサーバーを実行できます。
ブラウザで http://localhost:8080/webpack-dev-server/ にアクセスすると、アプリケーション (これまでは空白の HTML ページ) が実行されているのが確認できるはずです。
ES6 を使用して React コンポーネントを作成する
p>
webpack.config.js
で構成したエントリ ポイントに基づいて、アプリケーション ディレクトリで新しい app.jsx
ファイルを開きます。ファイル拡張子からわかるように、JSX JavaScript 構文拡張子を使用します。
首先,导入 app.jsx 所需的模块和文件: ES6 中新引入的 import 语句用于导入从外部模块或脚本导出的函数、对象或基元。 然后使用此 ES6 类声明定义一个类 在构造函数中,您将设置此可变数据( 在渲染函数中,使用 JSX 定义类似 HTML 模板的虚拟 DOM 元素。在本例中,包含自定义组件 当你构建应用程序时,Babel 会将所有这些 ES6 和 JSX 语法转换为浏览器可以正常渲染的 ES5。 使用 在这里,您会注意到用户名和颜色 这些值应该从用户登录中获取;但是,为了简化本练习的应用程序,我们只需使用一个简单的 虽然我在这里使用的是浏览器原生的提示对话框,但实际上,我建议您创建另一个具有登录功能的 UI 组件,或者使用第三方对话框组件。您可以找到许多可重用的组件,例如 Elemental UI 的 Modal 和 Material UI 的 Dialog。 现在,您将使用 PubNub 使应用程序具有协作性。 PubNub 是一个全球分布式数据流网络,可让您轻松构建实时应用程序。其核心功能是发布/订阅,可同时在多个用户之间发送和接收数据。 在此应用程序中,任何“登录”的人都可以在便签上发布消息并与其他用户共享。 要在您的应用中使用 PubNub,请确保 pubnub 模块已安装并导入到您的文件顶部。 首先,您需要对其进行初始化以创建 Pubnub 对象的实例。您在实例化过程中需要 API 密钥,因此请注册 PubNub 以获取您自己的密钥。 在这里,您将从“登录”过程中获得的用户名分配为 另外,请注意,对于这些全局常量值,我使用 ES6 要创建可共享笔记应用程序,您将使用 PubNub 的 在您的 React 应用程序中,让我们在 import React from 'react';
import ReactDOM from 'react-dom';
import StickieList from './stickieList';
import 'pubnub';
CollabStickies
,它扩展了 React.Component
类。这相当于 ES5 中的 React.createClass
方法:class CollabStickies extends React.Component {
constructor(props) {
super(props);
this.state = {
stickieList: []
}
}
componentWillMount() {
… // will explain later
}
...
render() {
return (
<div>
<StickieWritable username={this.props.username} color={this.props.color} />
<StickieList stickieList={this.state.stickieList} />
</div>
);
}
}
stickieList
数组)的初始状态。每次收到新的便笺时,我们都会使用 this.setState()
更新数组。StickieWritable
和 StickieList
。您可以将可变的 props 和 states 传递给要使用的组件。我们稍后将定义它们。使用数据绑定渲染 DOM 节点
ReactDOM.render()
(react-dom
包自带的),在 DOM 节点上渲染 CollabStickies
组件您的 HTML。ReactDOM.render(
<CollabStickies username={username} color={color} />,
document.getElementById('container')
);
props
。此数据用于 CollabStickies
组件并传递给其子组件。window.prompt()
来获取用户名,然后在加载应用程序时提供随机颜色的便笺。 var username = window.prompt('Your name');
const colors = ['yellow', 'pink', 'green', 'blue', 'purple'];
var color = colors[~~(Math.random() * colors.length)];
使用 PubNub 进行协作
正在初始化 PubNub
const publish_key = 'pub-c-1d17120...'; // your pub key
const subscribe_key = 'sub-c-85bdc...'; // your sub key
const pubnub = require('pubnub').init({
publish_key : publish_key,
subscribe_key : subscribe_key,
ssl: true,
uuid: username
});
const channel = 'stickie-notes';
uuid
,唯一标识符。 (在本练习中,我们将用户输入的任何字符串作为 uuid,但实际上,您需要一个真正的登录系统,以便每个 uuid 实际上是唯一的,没有重复!)const
声明,而不是 var
。在 ES6 中, const
充当只读变量,表示对值的常量引用。在后面的示例中,您还将看到新引入的 let
,它是一个块作用域局部变量。订阅消息
publish()
方法将您的笔记发送给每个人,而 subscribe()
让其他用户接收所有笔记。每次有人发布新笔记时,都会自动调用 subscribe()
方法。componentWillMount()
中调用 subscribe()
,该函数在应用程序生命周期中发生初始渲染之前立即调用。
componentWillMount() {
pubnub.subscribe({
channel: channel,
restore: true,
connect: () => this.connect(),
message: (m) => this.success(m)
});
}
订阅方法是异步的,当每个操作成功完成时,会调用 message
回调。在回调中,我们通过设置 stickieList
数组的状态来更新便签列表,该数组在开头的构造函数中定义。
在 React 中,使用 setState
修改数据会自动更新视图。
success(m) { let newList = [m].concat(this.state.stickieList); this.setState({stickieList: newList}); }
我们稍后将创建视图(UI 组件)。
在订阅回调中,您可能已经注意到带有箭头的有趣语法,=>
。这称为箭头函数,其语法比 ES5 函数表达式更短。此外,此表达式按词法绑定 this
值。再次强调,通过 Babel,我们可以利用所有 ES6 的强大功能!
此外,我们还使用可选的 connect
回调到订阅方法来检索“历史记录”。当第一次建立与 PubNub 的连接时,这将获取过去的数据。
connect() { pubnub.history({ channel: channel, count: 50, callback: (m) => { m[0].reverse(); for (var v of m[0]) { let newList = this.state.stickieList.concat(v); this.setState({stickieList: newList}); } } }); }
history()
是 PubNub 存储和回放功能的一部分,在本例中,它从 PubNub 获取最后 50 条消息。在 success
回调中,也通过在此处设置 stickieList
数组的状态来更新视图。
发布消息
让我们创建一个类,StickieWritable
。它是一个需要用户输入的便签组件。
它的渲染效果如下:
render() { return ( <div className={'stickie-note writable ' + this.props.color}> <textarea type='text' placeholder='Your new note...' onKeyUp={this.handleTextChange.bind(this)} /> </div> ); }
在textarea
中,监听onKeyUp
事件,每次触发该事件时,调用handleTextChange
函数检查是否键是返回/输入键。请注意,我在调用函数时绑定了 this 。与 React.createClass()
(React 的 ES5 方法创建类)不同,ES6 类不会自动将方法绑定到对象的实例,因此您需要自己绑定它。 (有几种不同的方法可以实现同一目标。)
在handleTextChange
函数中,将文本和用户数据发布到PubNub:
var data = { username: this.props.username, color: this.props.color, text: e.target.value, timestamp: Date.now() }; pubnub.publish({ channel: channel, message: data, callback: e.target.value = '' // resetting the text field });
现在,当用户在记事本中键入一些文本并按回车键时,该消息将发送到 PubNub,并且所有其他用户同时接收该消息(在 1/4 秒内!)。
创建 UI 组件
应用程序 UI 由一些 UI 组件组成,如下所示:
1. CollabStickies
2. StickieWritable
3.贴纸
4。粘性列表
组件 1 和 2 已经处理完毕,所以让我们创建组件 3,一个单独的便签组件。
创建一个新文件stickie.jsx以使用 JSX 呈现 UI。与 StickieWritable
组件不同,这是一个只读 UI 组件,没有 UX 功能。它只有一个 render()
函数,可以使用 prop 数据绘制带有文本的便签。
基本上,每次用户从另一个用户收到新消息时,该消息都会在新的粘性组件中呈现。
import React from 'react'; import ReactDOM from 'react-dom'; export default class Stickie extends React.Component { render() { return ( <div className={'stickie-note ' + this.props.color} > <p className='note'>{this.props.text}</p> <p className='username'>{this.props.username}</p> </div> ); } }
接下来,我们将创建另一个 UI 组件 stickieList.jsx,它是该组件的容器,并包含一堆便签纸。
p>
动画组件
将 Stickie.jsx 和所有其他依赖项导入到 StickieList.jsx 中。在这里,我使用 ReactCSSTransitionGroup
插件和自定义 Web 字体。
import React from 'react'; import ReactDOM from 'react-dom'; import ReactCSSTransitionGroup from 'react/lib/ReactCSSTransitionGroup'; import Stickie from './stickie'; import webfontloader from 'webfontloader'
您可以使用 npm 安装 Web 字体加载器:
$ npm install webfontloader
然后您可以加载您选择的任何自定义字体。您可以查看源代码,了解如何导入自定义 Google 字体。
在 render()
中,使用 ES6 箭头函数和 map()
迭代数组,并使用 stickieList
进行渲染您刚刚创建的每个 Stickie 组件:
export default class StickieList extends React.Component { render() { let items = (this.props.stickieList || []).map((item) => <li key={item.username + '-' + item.timestamp} > <div className="stickieWrapper"> <Stickie text={item.text} color={item.color} username={item.username}/> </div> </li>); return ( <ReactCSSTransitionGroup transitionName='animation' transitionEnterTimeout={500} transitionLeaveTimeout={500} component='ul' id="stickiesList"> {items} </ReactCSSTransitionGroup> ) } }
定义的组件可以使用 <reactcsstransitiongroup></reactcsstransitiongroup>
进行动画处理。设置 transitionName
,您需要在 CSS 中使用它来定义动画样式。另外,请注意 <li>
中的关键属性。当您使用 <reactcsstransitiongroup></reactcsstransitiongroup>
时,您需要为每个列表使用唯一的键来为每个组件设置动画。
React 添加了额外的类名。例如,当你的 transitionName
是 'animation
' 时,你还会有 'animation-enter
', ' Animation-enter-active
'、'animation-leave
' 和 'animation-leave-active
'。
以下是 /css/style.css 中的代码:
.animation-enter { opacity: 0.1; transform: scale(1.3); transition: all 1s ease-out; } .animation-enter.animation-enter-active { opacity: 1; transform: scale(1); } ...
现在,您刚刚使用 React 和 PubNub 构建了一个实时协作应用程序!我希望您喜欢本教程!
CSS を含む完全なコードは、この GitHub リポジトリで確認できます。このチュートリアルでは「lite」バージョン app-lite.jsx を使用していますが、その他の機能については app.jsx をチェックしてください。 p>
チャット アプリケーション、マルチプレイヤー ゲーム、取引アプリケーションなどのリアルタイム アプリケーションの構築に興味がある場合は、PubNub にアクセスして、その他のリソースを見つけてください。
もっと反応が欲しいですか?
React スキルを最大限に高めることを特に目的としたコースがあります。このコースでは、React と Redux を使用して最新の Web アプリケーションの構築を開始します。これら 2 つのライブラリを使用して、最初から完全な Web アプリケーションを構築します。
最も単純なアーキテクチャから始めて、ゆっくりと機能ごとにアプリケーションを構築します。ツール、リデューサー、ルーティングなどの基本概念について学びます。また、スマート コンポーネントとダム コンポーネント、純粋なコンポーネント、非同期操作など、より高度なテクニックについても学習します。最後に、間隔をあけて繰り返し学習するための完全なフラッシュカード アプリを作成します。
### 興味ありますか?見てみましょう!参考文献
-
PubNub: IoT、モバイル、Web アプリケーション向けのグローバルなリアルタイム データ ストリーミング ネットワーク<li>
PubNub JavaScript SDK チュートリアル<li>
React: ユーザー インターフェイスを作成するための JavaScript ライブラリ<li>
ES6: ECMAScript 2015 言語仕様<li>
webpack:モジュールジェネレーター<li>
以上がPubNub、React.js、ES6 を使用してコラボレーションを促進する Web アプリケーションを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

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

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。
