Skip to content

useTopic

呼び出し元コンポーネントが存在する間、ROS トピックを購読し続け、新しいメッセージが届くたびに再レンダリングします。トピック名/タイプやその他のオプションが変わると自動的に再購読し、アンマウント時には自動的に unsubscribe します。

tsx
import { useTopic } from "roshooks";

interface StringMsg {
  data: string;
}

const { message, topic } = useTopic<StringMsg>({
  name: "/chatter",
  messageType: "std_msgs/String",
});

オプション

オプション既定値説明
namestringトピック名(例: "/chatter")。
messageTypestringメッセージ型(例: "std_msgs/String")。
compressionstring"none""png" / "cbor" / "cbor-raw" / "none"
throttle_ratenumber0メッセージ間の最小間隔(ms)。
queue_sizenumber100ブリッジ側の配信用キューサイズ。
latchbooleanfalseパブリッシュ時にトピックをラッチするか。
queue_lengthnumber0ブリッジ側の購読用キュー長。
reconnect_on_closebooleantrue再接続時に自動で再購読するか。
enabledbooleantruefalse にすると購読をスキップします(他の状態を待っている間など)。

返り値

フィールド説明
messageTMessage | null直近に受信したメッセージ。最初の1件が届くまで(または enabledfalse の間)は null
topicTopic<TMessage> | nullroslib.js の Topic インスタンス本体。未購読の間は null

使用例

tsx
function ChatterLabel() {
  const { message } = useTopic<{ data: string }>({
    name: "/chatter",
    messageType: "std_msgs/String",
  });

  return <p>{message?.data ?? "(まだありません)"}</p>;
}

条件付きで購読する

tsx
const { message } = useTopic<StringMsg>({
  name: "/chatter",
  messageType: "std_msgs/String",
  enabled: isVisible,
});

トピックへの publish には usePublisher を参照してください。また、コンポーネントごとに購読が増えるのではなく1本の購読を複数コンポーネントで共有したい場合は Jotaiでのグローバル状態管理 も参考にしてください。

Released under the BSD-3 License.