nr1
CLI のバージョン 2.49.1 以降では、 React フックを使用して New Relic アプリケーションとカスタム ビジュアライゼーションを構築できます。このガイドでは、動作中の React フックの Nerdlet の例をいくつか紹介します!
あなたが始める前に
Nerdpack の開発には、New Relic アカウントと New Relic CLI の nr1
が必要です。
まだ行っていない場合:
- New Relic アカウントにサインアップする
- Node.jsをインストールする
- CLI クイック スタートを完了する
これで、 my-awesome-nerdpack
という Nerdpack ができました。この Nerdpack には、名前を付けた Nerdlet とランチャーがあります (ただし、このガイドでは、デフォルトのランチャー名「launcher」と Nerdlet 名「home」を使用します)。このガイドでは、この Nerdpack を使用します。
最後に、 nr1
が最新であることを確認してください。このガイドでは、最小バージョン 2.49.1 が必要です。
$nr1 update$nr1 version@datanerd/nr1/2.49.1 darwin-x64 node-v14.15.1
import React from 'react';
export default class HomeNerdlet extends React.Component { render() { return <h1>Hello, home Nerdlet!</h1>; }}
アプリケーションをローカルで更新して提供する
nr1
を使用すると、Nerdpack のローカル ビルドを New Relic に提供できます。これは、アプリケーションを公開する前に、実稼働環境に似た環境でアプリケーションを開発するのに役立ちます。
コードを変更する前に、Nerdpack のディレクトリ構造をよく理解しておいてください。
my-awesome-nerdpack/├───README.md├───launchers/│ └───launcher/│ └───nr1.json├───nerdlets/│ └───home│ ├───index.js│ ├───nr1.json│ └───styles.scss├───node_modules/├───nr1.json├───package-lock.json└───package.json
launchers および nerdlets ディレクトリには、アプリケーションのロジックが含まれています。 ほとんどのコードを更新するのは、これらのディレクトリです。Nerdpack 全体の nr1.json ファイルには、Nerdpack、Nerdlets、およびランチャーに関するメタデータが保持されます。
ヒント
Nerdpack ファイル構造の詳細については、ドキュメントをお読みください。
my-awesome-nerdpack/nerdlets/home/index.jsで、 HomeNerdlet クラスを関数に変更します。
import React from 'react';
function HomeNerdlet() { return <h1>Hello, home Nerdlet!</h1>;}
export default HomeNerdlet;
次に、ヘッダーの代わりに Billboard チャートを返します。
import React from 'react';import { BillboardChart } from 'nr1';
function HomeNerdlet() { const clickCount = { metadata: { id: '1', name: 'Count', viz: 'main', }, data: [{ y: 10 }], }; return <BillboardChart data={[clickCount]} />;}
export default HomeNerdlet;
今のところ、Billboard チャートに静的な値を表示していますが、後の手順で、関数のローカル状態を使用して動的な値を指定します。
まだ行っていない場合は、Nerdpack のルート ディレクトリからアプリケーションを提供します。
$nr1 nerdpack:serveFound and loaded 2 nr1.json files on MyAwesomeNerdpack (aad7ebb6-8901-43d0-a681-0719b2c60a11) Nerdpack.Nerdpack: ✔ MyAwesomeNerdpack (aad7ebb6-8901-43d0-a681-0719b2c60a11) nr1.jsonLaunchers: ✔ launcher launchers/launcher/nr1.jsonNerdlets: ✔ home nerdlets/home/nr1.jsonThere is no certificate created yet. ✔ New certificate created.Webpack bundle analyzer is enabled (you need to wait for the first build to finish) └ You can head to http://127.0.0.1:27888NOTE: To verify how your assets will look in production, you need to add "--mode=prod" when starting the development server.🛠 Built artifact files for:ex.js... ⁎ aad7ebb6-8901-43d0-a681-0719b2c60a11--home built ✔ ✔ Nerdpack built successfully! ★ Starting as orchestrator... ✔ Server ready! Test it at: https://one.newrelic.com/?nerdpacks=local ↩ Server will reload automatically if you modify any file! ℹ Additionally, you can test the following artifacts at:Launchers: ⁎ launcher https://onenr.io/0z7wkEkMnjL ℹ You can use "npm start -- --mode=prod" to run the development server in prod mode.
出力の下部にある URL を使用して、ランチャーを開きます。
Launchers: * launcher https://onenr.io/0z7wkEkMnjL ℹ You can use "npm start -- --mode=prod" to run the development server in prod mode.
ファイルを変更すると Nerdlet が自動的にリロードされるため、サーバーを実行したままにします。
Nerdlet で useState()
フックを使用する
以前は、ビルボード チャートに静的な値を使用していました。ここで、関数のローカル状態を使用して動的な値を保存し、その値をチャートに表示します。
my-awesome-nerdpack/nerdlets/home/index.jsで、関数コンポーネントで useState()
を呼び出します。
import React, { useState } from 'react';import { BillboardChart } from 'nr1';
function HomeNerdlet() { const [count, setCount] = useState(0);
const clickCount = { metadata: { id: '1', name: 'Count', viz: 'main', }, data: [{ y: 10 }], }; return <BillboardChart data={[clickCount]} />;}
export default HomeNerdlet;
ここでは、 useState()
を呼び出します。このフックは、配列にキャプチャする 2 つの値を返します。
count
: ローカル状態の現在の値。デフォルト値は 0 で、これはuseState()
に渡した引数です。setCount
: 更新に使用する関数count
Billboard チャート データを count
を使用するように変更します。
import React, { useState } from 'react';import { BillboardChart } from 'nr1';
function HomeNerdlet() { const [count, setCount] = useState(0);
const clickCount = { metadata: { id: '1', name: 'Count', viz: 'main', }, data: [{ y: count }], }; return <BillboardChart data={[clickCount]} />;}
export default HomeNerdlet;
現在、状態を更新しないため、count の値はすべてのレンダリングで 0
になります。それを行う方法が必要です。
グラフの横に、 count
をインクリメントするボタンをレンダリングします。
import React, { useState } from 'react';import { BillboardChart } from 'nr1';
function HomeNerdlet() { const [count, setCount] = useState(0);
const clickCount = { metadata: { id: '1', name: 'Count', viz: 'main', }, data: [{ y: count }], }; return ( <div> <BillboardChart data={[clickCount]} /> <button onClick={() => setCount(count + 1)}>Increment count</button> </div> );}
export default HomeNerdlet;
ここでは、クリックするたびにカウントを 1 ずつ増やすボタンを Nerdlet に追加しました。
Nerdlet で useEffect()
フックを使用する
Nerdlet に Billboard チャートとボタンが追加されました。グラフには、ボタンをクリックした回数が表示されます。 useEffect()
を使用して count
を自動的にインクリメントします。
my-awesome-nerdpack/nerdlets/home/index.jsで、エフェクトを作成します。
import React, { useState, useEffect } from 'react';import { BillboardChart } from 'nr1';
function HomeNerdlet() { const [count, setCount] = useState(0);
useEffect(() => { setTimeout(() => { setCount(() => count + 1); }, 1000); });
const clickCount = { metadata: { id: '1', name: 'Count', viz: 'main', }, data: [{ y: count }], }; return ( <div> <BillboardChart data={[clickCount]} /> </div> );}
export default HomeNerdlet;
useEffect()
1 秒ごとに count
値を自動的に増やします。カウントを自動化したので、インクリメント ボタンも削除しました。
概要
このガイドでは、次の方法について学習しました。
- ローカルの New Relic Nerdpack を作成する
- Nerdpack でフックを使用する