反応フックでharperdbインスタンスを使う方法
24442 ワード
HarperDB Cloud CRUD操作のSQLおよびNOSQLクエリをサポートするデータベースサービスです.それは始めるために最小限の構成を必要とします、そして、そのレルムはノードのようなサーバー側技術でREST APIを構築するだけではありません.js
HarperDBは、クライアント側アプリケーションで直接データベースクラウドインスタンスにアクセスする方法を提供します.これは、組み込みのHTTP APIを直接データをクエリすることができます.
このポストでは、HarperDBクラウドデータベースインスタンスを構成し、ReactJSアプリ内のデータベースに問い合わせてデータを取得する方法を見てみましょう.HarperDBは反応フックを提供しますuseHarperDB 我々の仕事をより簡単にするために.
このポストは、HarperDBデータベースの類似したインスタンスを使用します.我々の中のJSprevious post . クラウドインスタンスを設定する方法についての記事をご覧くださいhere . この方法では、データフィールドの人口テーブルがあります.
上記のデータベースインスタンスのスキーマをコールする
スキーマの下に、1つ以上のテーブルを追加するオプションがあります.上の例では、既に作成されたテーブルがあり、
右側には、テーブル内のデータが表示されます.つのタイムスタンプフィールドに注意してください.新しい行がテーブルに追加され、自動維持されるたびにHarpRDBによって自動挿入されます.
CreateDate :データを挿入する際にタイムスタンプを記録します.
UpdatedTime :任意のデータフィールドが最後に更新されるときにタイムスタンプを記録します.
クラウドインスタンスを設定したら、ライブラリのバージョンを使用して反応プロジェクトを使用してください
新しい反応アプリを作成して起動します.我々はこのポストの例アプリを構築するため、この反応アプリを使用するつもりです.ターミナルウィンドウを開き、次のコマンドを実行します.
既定では、HarperDBクラウドインスタンスで作成されたユーザーはスーパーユーザです.これは、既存のスキーマからテーブルを作成およびドロップするためのデータと権利をクエリおよび追加する管理権を持ち、新しいスキーマを作成および削除します.クライアント側アプリケーションでは、スーパーユーザを必要としません.ほとんどのクライアントアプリケーションが公開されているので、これはデフォルトのユーザーを使用する良い方法ではありません.
これを解決するアプローチは、データテーブル内でCRUD操作のみを行う権限を持つ新しいユーザーを作成することです.HarperDBは、カスタムのユーザーロールを定義する方法と、そのロールを使用して新しいユーザーを作成する方法を提供します.
クラウドインスタンスを開き、タブに移動します
ここでは、カスタム標準を作成する新しい標準ロールを定義できます.この新しい役割をしましょう.
新しいロールが作成されると、インスタンスはこのロールを持つ任意のユーザーに割り当てることができる権限を要求します.現在、この特定のロールのテーブルとスキーマへのアクセスを構成することができます.現在は1つのスキーマだけがあり、内部には1つのデータテーブルがあります.この例では、既定の設定を維持し、ボタンの更新ロールのパーミッションを押して進みます.
許可が更新されると、タブに移動します
ボタンをクリックして新しいユーザーを追加します.
今、我々はテーブルからデータを照会するクライアント反応アプリでこのカスタムユーザーを使用することができます
The
以下のインポート文を内部に追加します
新しいファイルを作成する
反応アプリでデータベースインスタンスからデータを照会するには
開ける
データベースインスタンスからデータを照会するには、フックの中にオブジェクトを渡します.
次のスニペットクエリを
JSXを加えましょう
また、あなたが通過している場合
JavaScriptの使用
クエリは、
フックは、反応の世界で素晴らしい追加され、彼らは確かに我々は以下のコードを書くのに役立ちます.このポストの目的は、あなたに
HarperDBは、クライアント側アプリケーションで直接データベースクラウドインスタンスにアクセスする方法を提供します.これは、組み込みのHTTP APIを直接データをクエリすることができます.
このポストでは、HarperDBクラウドデータベースインスタンスを構成し、ReactJSアプリ内のデータベースに問い合わせてデータを取得する方法を見てみましょう.HarperDBは反応フックを提供しますuseHarperDB 我々の仕事をより簡単にするために.
インスタンス用語集
このポストは、HarperDBデータベースの類似したインスタンスを使用します.我々の中のJSprevious post . クラウドインスタンスを設定する方法についての記事をご覧くださいhere . この方法では、データフィールドの人口テーブルがあります.
上記のデータベースインスタンスのスキーマをコールする
dev
. HarperDBのスキーマが必要です.これは、テーブルのコレクションに相当する.既存のスキーマがない場合は、新しいテーブルを作成することができず、テーブルなしでHarperDBインスタンスでデータを追加または更新できません.スキーマの下に、1つ以上のテーブルを追加するオプションがあります.上の例では、既に作成されたテーブルがあり、
outlets
. このテーブルは一意の識別子id
データの各行に対して.右側には、テーブル内のデータが表示されます.つのタイムスタンプフィールドに注意してください.新しい行がテーブルに追加され、自動維持されるたびにHarpRDBによって自動挿入されます.
CreateDate :データを挿入する際にタイムスタンプを記録します.
UpdatedTime :任意のデータフィールドが最後に更新されるときにタイムスタンプを記録します.
クラウドインスタンスを設定したら、ライブラリのバージョンを使用して反応プロジェクトを使用してください
16.8.0+
.始める
新しい反応アプリを作成して起動します.我々はこのポストの例アプリを構築するため、この反応アプリを使用するつもりです.ターミナルウィンドウを開き、次のコマンドを実行します.
npx create-react-app harperdb-integration-react
# after the project directory has been created
cd harperdb-integration-react
# install the following dependency
yarn add [email protected]
今、あなたは行動の反応アプリを見て開発サーバーを起動することができます.ターミナルウィンドウに移動し、コマンドを実行するyarn start
. 次の出力をブラウザウィンドウでURLで取得します.http://localhost:3000/
.カスタムロールを使用したユーザーの作成
既定では、HarperDBクラウドインスタンスで作成されたユーザーはスーパーユーザです.これは、既存のスキーマからテーブルを作成およびドロップするためのデータと権利をクエリおよび追加する管理権を持ち、新しいスキーマを作成および削除します.クライアント側アプリケーションでは、スーパーユーザを必要としません.ほとんどのクライアントアプリケーションが公開されているので、これはデフォルトのユーザーを使用する良い方法ではありません.
これを解決するアプローチは、データテーブル内でCRUD操作のみを行う権限を持つ新しいユーザーを作成することです.HarperDBは、カスタムのユーザーロールを定義する方法と、そのロールを使用して新しいユーザーを作成する方法を提供します.
クラウドインスタンスを開き、タブに移動します
roles
from the menu bar .ここでは、カスタム標準を作成する新しい標準ロールを定義できます.この新しい役割をしましょう.
client_user
.新しいロールが作成されると、インスタンスはこのロールを持つ任意のユーザーに割り当てることができる権限を要求します.現在、この特定のロールのテーブルとスキーマへのアクセスを構成することができます.現在は1つのスキーマだけがあり、内部には1つのデータテーブルがあります.この例では、既定の設定を維持し、ボタンの更新ロールのパーミッションを押して進みます.
許可が更新されると、タブに移動します
users
隣にroles
メニューバーで.これは、作成したカスタムロールを使用して新しいユーザーを追加するために使用されます.ドロップダウンメニューからclient_user
.ボタンをクリックして新しいユーザーを追加します.
今、我々はテーブルからデータを照会するクライアント反応アプリでこのカスタムユーザーを使用することができます
outlets
.反応におけるHarperDBの統合
The
use-harperdb
フック付きHarperDBProvider
これは、反応アプリのインスタンスをラップするために使用されますApp
コンポーネント全体でindex.js
ファイル.これは、データベースインスタンスでCRUD操作を実行するために必須です.以下のインポート文を内部に追加します
src/index.js
ファイル// ... other import statements
import { HarperDBProvider } from 'use-harperdb';
データベースインスタンスでCRUD操作を実行するには、DBインスタンスURL、ユーザー名、およびそのユーザーに関連付けられたパスワードが必要です.環境変数を利用してこれらの値を追加します.新しいファイルを作成する
.env
次の変数を持つプロジェクトのルートで.これらの変数の値は[]
しかし、あなたは角括弧とあなた自身の値を交換しなければなりません.REACT_APP_DB_URL=[Your Cloud Instance Provider URL]
REACT_APP_USER=[The name of the custom user with client_user role]
REACT_APP_PASSWORD=[The password associated with the custom user]
を作成する反応アプリを事前に任意の環境変数を読み取りますREACT_APP
. サードパーティライブラリを使用する代わりに、直接これらの環境変数を使用して必要な属性を提供することができますHarperDBProvider
.ReactDOM.render(
<React.StrictMode>
<HarperDBProvider
url={process.env.REACT_APP_DB_URL}
user={process.env.REACT_APP_USER}
password={process.env.REACT_APP_PASSWORD}
>
<App />
</HarperDBProvider>
</React.StrictMode>,
document.getElementById('root')
);
それです.我々は正常にHarperDBデータベースインスタンスを使用して反応アプリを構成している.HarperDBからのデータの照会
反応アプリでデータベースインスタンスからデータを照会するには
useHarperDB
フックはそうするための要素を提供します.開ける
App.js
ファイルをインポートしますuse-harperdb
. また、取得時にデータを表示するための基本UIを設定しましょう.import React from 'react';
import './App.css';
import { useHarperDB } from 'use-harperdb';
function App() {
return (
<div className="App">
<header className="App-header">
<h2>Starbucks Outlets</h2>
<table>
<thead style={{ marginBottom: '20px' }}>
<tr>
<td style={{ textTransform: 'uppercase' }}>City</td>
<td style={{ textTransform: 'uppercase' }}>Name</td>
<td style={{ textTransform: 'uppercase' }}>Latitude</td>
<td style={{ textTransform: 'uppercase' }}>Longitude</td>
</tr>
</thead>
<tbody>
<tr>{/* TODO: display data from query */}</tr>
</tbody>
</table>
</header>
</div>
);
}
export default App;
フックを使用するルールは、機能コンポーネント内でのみ消費できることです.The useHarperDB
フックは要素を配列で与え、data
を返します.また、loading
クエリが実行されているかどうかをユーザーに知らせることができますerror
データの問い合わせ時にエラーが発生したかどうかを判断するrefresh
データを取得できる機能です次のスニペットクエリを
App.js
データベースからすべてのデータを取得するファイル.function App() {
const [data, loading, error, refresh] = useHarperDB({
query: { operation: 'sql', sql: 'select * from dev.outlets' }
// interval: 5000
});
//...
}
上記のスニペットでは、interval
渡されるのは、明示的に使用したくないときに使うオプションですrefresh
関数.これはミリ秒単位で値を受け取ります.JSXを加えましょう
loading
and error
使用によってif/else
内部の構文App
コンポーネント.function App() {
// ...
if (loading) {
return <div>Loading ...</div>;
}
if (error && data.length === 0) {
return <div>Error, no data found</div>;
}
return (
<div className="App">
<header className="App-header">
<h2>Starbucks Outlets</h2>
<table>
<thead style={{ marginBottom: '20px' }}>
<tr>
<td style={{ textTransform: 'uppercase' }}>City</td>
<td style={{ textTransform: 'uppercase' }}>Name</td>
<td style={{ textTransform: 'uppercase' }}>Latitude</td>
<td style={{ textTransform: 'uppercase' }}>Longitude</td>
</tr>
</thead>
<tbody>
<tr>{/* TODO: display data from query */}</tr>
</tbody>
</table>
</header>
</div>
);
}
非常に簡単な瞬間には、読み込みメッセージを表示することがあります.また、あなたが通過している場合
interval
番目のプロパティとして、あなたは5秒毎に、反応アプリが自動的にWebページを更新することに気づくことがあります.この動作を停止するには、interval
プロパティ.JavaScriptの使用
map
関数の配列をマップしましょうdata
と内容を表示します.データが取り出されるなら、それは存在することを意味します、そして、我々は簡単に配列を地図化することができます.コメントの代わりに次のコードスニペットを追加します.<tbody>
{data &&
data.map((item, index) => (
<tr key={index}>
<td>{item.title}</td>
<td>{item.author}</td>
</tr>
))}
</tbody>
ブラウザウィンドウに戻り、次のような結果が得られます.クエリは、
useHarperdb
唯一のフックdata
配列.データベースからアウトレットまたはレコードの合計数を取得するには、次のクエリを追加します.const [data2] = useHarperDB({
query: {
operation: 'sql',
sql: 'select count(*) as totalOutlets from dev.outlets'
}
});
合計カウントを表示するには、App
コンポーネント// ...
<h2>Starbucks Outlets</h2>
<p>Total Outlets: {data2 && data2[0].totalOutlets}</p>
// ...
次の出力は以下の通りです.結論
フックは、反応の世界で素晴らしい追加され、彼らは確かに我々は以下のコードを書くのに役立ちます.このポストの目的は、あなたに
useHarperDB
フックとどのようにクラウドでホストされているデータベースからデータを取得するために反応アプリに統合する方法.Reference
この問題について(反応フックでharperdbインスタンスを使う方法), 我々は、より多くの情報をここで見つけました https://dev.to/amanhimself/how-to-use-harperdb-instance-with-react-hooks-5878テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol