$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