$sessionStorage

ในระหว่างการเดินทางปัจจุบัน ให้บันทึกสถานะชั่วคราวสำหรับอินสแตนซ์เครื่องมือปัจจุบัน เช่น ความเร็วสูงสุดที่เครื่องมือสังเกต เวลาสะสม หรือผลการคำนวณของเฟรมก่อนหน้า ว่างเปล่าหลังการเดินทาง

ขอบเขตการจัดเก็บ

"เซสชัน" ในที่นี้หมายถึง การเดินทางครั้งนี้ ในการเดินทางเดียวกัน เครื่องมือสามารถดึงค่าที่บันทึกไว้ก่อนหน้านี้เมื่อดำเนินการ main() หลายครั้ง ดังนั้นจึงเหมาะสำหรับการรักษาสถานะครอสเฟรม เช่น ค่าสูงสุดและตัวนับ

พื้นที่จัดเก็บเป็นของอินสแตนซ์เครื่องมือปัจจุบันในเวลาเดียวกัน: วางเครื่องมือที่เหมือนกันสองชิ้นบนหน้า และแต่ละเครื่องมือจะบันทึกสถานะของตัวเอง

เมื่อไหร่ควรเก็บ เมื่อไหร่ควรเคลียร์

เงื่อนไข พฤติกรรมการจัดเก็บ
การเดินทางเดียวกันอินสแตนซ์เครื่องมือที่ทำงานอย่างต่อเนื่องเหมือนเดิม สงวนไว้ระหว่างการเรียก main() หลายครั้ง
การเดินทางปัจจุบันสิ้นสุดลง หรือแอปออกจากสถานะการบันทึก ว่างเปล่า. get ส่งคืน null เมื่อไม่มีการเดินทางที่ใช้งานอยู่ set จะไม่เก็บการเขียน
เริ่มต้นการเดินทางครั้งต่อไป เริ่มจากพื้นที่เก็บข้อมูลว่างและไม่สืบทอดค่าจากส่วนก่อนหน้า
สคริปต์เครื่องมือโหลดซ้ำ อินสแตนซ์การวาดถูกทำลาย หรือแอปรีสตาร์ท ค่าชั่วคราวจะสูญหายและไม่สามารถกู้คืนได้ในภายหลังในระหว่างการเดินทางเดียวกัน
การแสดงตัวอย่างตัวแก้ไข ใช้พื้นที่เก็บข้อมูลแสดงตัวอย่างอิสระและไม่ต้องเขียนแผนการเดินทางของยานพาหนะจริง ค่าแสดงตัวอย่างจะไม่ถูกนำมาใช้เมื่อเปลี่ยนไปใช้การทำงานจริง

โดยจะบันทึกสถานะที่สังเกตและคำนวณระหว่างการทำงานของเครื่องมือ หากเปิดเครื่องมือไว้ตรงกลาง จะไม่สามารถรับค่าสูงสุดของทริปก่อนเปิดเครื่องได้โดยอัตโนมัติ ข้อมูลที่จำเป็นต้องเก็บไว้เป็นเวลานานไม่ควรบันทึกไว้ที่นี่เท่านั้น

การอ่านและการเขียนวัตถุและอาร์เรย์

ทั้ง get และ set ใช้สำเนาข้อมูล ตัวอย่างเช่น หากคุณนำอาร์เรย์ออกและเพิ่มองค์ประกอบเข้าไป อาร์เรย์เดิมในพื้นที่เก็บข้อมูลจะไม่เปลี่ยนแปลง และคุณต้องเรียก set อีกครั้งเพื่อบันทึกการเปลี่ยนแปลง

คีย์จะต้องเป็นสตริง สามารถเก็บจำนวนจำกัด สตริง ค่าบูลีน null และอ็อบเจ็กต์และอาร์เรย์ธรรมดาที่ประกอบด้วยค่าเหล่านี้ ไม่สามารถบันทึกฟังก์ชัน View การอ้างอิงแบบวงกลม และอ็อบเจ็กต์พิเศษได้ หลังจากตั้งค่าคีย์เป็น null แล้ว ให้อ่านคีย์เพื่อรับ null; อินเทอร์เฟซปัจจุบันมีสองวิธี get และ set

ตัวอย่าง: ความเร็วสูงสุดที่สังเกตได้ระหว่างการเดินทางครั้งนี้

อินพุต ข้อมูลพื้นฐาน สองอินพุตถูกกำหนดไว้ใน การกำหนดค่าพารามิเตอร์: ความเร็วพร้อมตัวระบุ speed และสถานะการบันทึกพร้อมตัวระบุ recording เส้นแนวนอนจะแสดงขึ้นเมื่อไม่มีการเดินทางที่ใช้งานอยู่ การวิ่งแต่ละครั้งจะเปรียบเทียบความเร็วปัจจุบันกับค่าสูงสุดที่บันทึกไว้ จากนั้นจะบันทึกค่าที่มากกว่า ค่าสูงสุดจะถูกบันทึกใน km/h และแปลงตามหน่วยปัจจุบันเมื่อแสดงเพื่อหลีกเลี่ยงการผสมหน่วย

หากไม่มีการทดสอบ ค่าสูงสุดที่สังเกตได้จะยังคงอยู่ และค่าศูนย์ที่มีประสิทธิผลจะมีส่วนร่วมในการคำนวณตามปกติ ส่วนถัดไปของการเดินทางเริ่มต้นจากค่าว่าง

function main() {
  if ($data.current.recording !== true) {
    return (
      <Text fontSize={48} color={$env.foreground}>
        —
      </Text>
    );
  }
  const speed = $data.current.speed;
  const saved = $sessionStorage.get('peakKmh');
  let peak = typeof saved === 'number' ? saved : null;

  if (typeof speed?.value === 'number') {
    const kmh = speed.unit === 'mph' ? speed.value * 1.609344 : speed.value;
    peak = peak == null ? kmh : Math.max(peak, kmh);
    $sessionStorage.set('peakKmh', peak);
  }

  const unit = speed?.unit ?? $env.speedUnit;
  const value =
    peak == null ? '—' : Math.round(unit === 'mph' ? peak / 1.609344 : peak);
  return (
    <VStack spacing={6}>
      <Text fontSize={48} color={$env.foreground}>
        {value}
      </Text>
      <Text color={$env.accent}>{unit}</Text>
    </VStack>
  );
}

ขีดจำกัดความจุ

แต่ละร้านค้ามีคีย์ได้สูงสุด 256 คีย์ โดยมีขนาดข้อมูลรวมประมาณ 1 MiB; คีย์เดียวมีขนาดสูงสุด 256 UTF-8 ไบต์ นอกจากนี้ยังมีข้อจำกัดด้านขนาดและการซ้อนในการคัดลอกค่าอีกด้วย หากเกินขีดจำกัดหรือส่งผ่านค่าที่ไม่รองรับ จะมีการรายงานข้อผิดพลาด และการเขียนที่ล้มเหลวจะไม่เขียนทับค่าเดิมที่ถูกต้อง

เหมาะสำหรับการบันทึกสถานะทางสถิติจำนวนเล็กน้อย การต่อท้ายอาร์เรย์ทีละเฟรมเป็นเวลานานจะยังคงเติบโตต่อไป เส้นโค้งควรใช้ $data.history ก่อน หรือจำกัดความยาวของอาร์เรย์ด้วยตัวเอง

วิธี

get(key: string)unknown | null

อ่านค่าที่อินสแตนซ์มาตรวัดนี้บันทึกไว้ระหว่างการเดินทางปัจจุบัน คืนค่า null หากไม่มีคีย์นั้น และคืนออบเจ็กต์กับอาร์เรย์เป็นสำเนาแยกต่างหาก

set(key: string, value: unknown)void

คัดลอกค่าแล้วบันทึกหรือเขียนทับคีย์ที่ระบุ หากไม่มีการเดินทางที่กำลังดำเนินอยู่ จะไม่เก็บค่าที่เขียน คืนค่า undefined