main()

儀表腳本的繪製入口。CapDrive 呼叫 main() 取得本次畫面,並負責佈局、繪製與後續刷新。

執行過程

每次接受新的輸入時,CapDrive 更新本次資料和顯示環境,在新的局部作用域執行整個檔案,再呼叫本次定義的 main()。函式同步回傳內置 View、View 陣列或空內容。

頂層取數與計算也會在每次執行時更新。普通變數每次重新初始化,跨次狀態使用 $sessionStorage。

當前輸入、輸入定義或顯示環境變化會觸發執行,沒有統一固定的頻率。完全相同的輸入會跳過,處理中只保留最新的待處理輸入。歷史窗口增長、清理和內部採樣時間變化不會單獨觸發執行;顯式定義的時間輸入變化仍會觸發。動畫由繪制端獨立執行。

範例:依目前讀數繪製

在儀表設定中選擇速度。每次呼叫都讀取最新速度,生成數字和單位;沒有可用速度時顯示橫線。

function main() {
  const speed = $data.current.speed;
  return (
    <VStack spacing={8}>
      <Text fontSize={64} color={$env.foreground}>
        {speed?.value == null ? '—' : Math.round(speed.value)}
      </Text>
      <Text fontSize={16} color={$env.accent}>
        {speed?.unit ?? $env.speedUnit}
      </Text>
    </VStack>
  );
}

多次呼叫之間的狀態

普通局部變數只用於本次函式呼叫。需要在當前行程內保留峰值、計數等狀態時,使用 $sessionStorage;它按行程和儀表實例隔離,結束行程或重新加載儀表時會清空。

需要列表時可通過陣列 map 生成 View。為會更新或重排的項目提供穩定的 key,讓繪製更新和動畫繼續對應同一個項目。

執行要求與錯誤

main() 應在一次同步呼叫內完成。避免持續循環、阻塞等待和無界增長的資料結構;執行時會限制執行時間、步驟和繪製內容規模。繪製屬性中的數值需要是有限數字,計算結果應先處理缺測、除零等情況。

腳本錯誤會顯示在儀表錯誤狀態和相應日誌中。預覽用於驗證顯示程式碼;實際儀表的讀數取決於已選資料和當前資料源。