วงจรชีวิตของฟังก์ชันที่ประกอบได้

Dec 01 2022
jetpack แต่งเป็นชุดเครื่องมือ UI ที่ทันสมัยสำหรับ Android เป็น UI ที่เปิดเผยซึ่งแทนที่ Imperative one (xml)

jetpack แต่งเป็นชุดเครื่องมือ UI ที่ทันสมัยสำหรับ Android เป็น UI ที่ เปิดเผยซึ่งแทนที่Imperative one (xml)

ในแบบคลาสสิกที่คุณใช้เพื่อจัดการกิจกรรมหรือวงจรชีวิตส่วนย่อยๆ มากมาย ( onStart , onCreate , onResume …ฯลฯ)

ตามเอกสาร อย่างเป็นทางการ :

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

ดังนั้นเราจึงมีสามเหตุการณ์:

I. ป้อนองค์ประกอบ

ครั้งที่สอง รับการจัดองค์ประกอบใหม่สำหรับ N ครั้ง

สาม. ออกจากองค์ประกอบ

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

ตัวอย่างเช่น:

@Composable
fun MoviesScreen(movies: List<Movie>) {
    Column {
        for (movie in movies) {
            key(movie.id) { // Unique ID for this movie
                MovieOverview(movie)
            }
        }
    }
}

มิฉะนั้น เราจะต้องจัดการ recoposition โดยไม่จำเป็นต้องเรียกคืนฟังก์ชัน

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

แล้วจะทำ Recomposition ได้อย่างไร?

recompositon ขึ้นอยู่กับประเภทตัวแปรของฟังก์ชันที่เขียนได้

หากตัวแปรมาจากประเภทที่เสถียร (( Boolean, Int, Long, Float, Char, ฯลฯ) จะไม่มีการจัดเรียงใหม่

แล้วจะแปลงประเภทที่เสถียรเหล่านี้เป็นประเภทที่สามารถนำไปสู่การจัดองค์ประกอบใหม่ได้อย่างไร

ตามเอกสาร อย่างเป็นทางการ :

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

ดังนั้นเราจึงต้องใช้ อินเทอร์เฟซ MutableState<T>เพื่อเพิ่มความไม่แน่นอนให้กับฟังก์ชันการเขียนของเรา ดังนั้นการจัดองค์ประกอบใหม่จะเกิดขึ้นทุกครั้งที่ค่าของประเภทนี้เปลี่ยนแปลง

คลาสMutableState<T>ถ้า frome พิมพ์State<T>

interface MutableState<T> : State<T> {
    override var value: T
}

สถานะที่ไม่แน่นอนของ

var list by remeber{mutableStateOf(initialValue)}
or 
val list = remember { mutableStateOf(initialValue) } // val variable will not change

import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue

list.value = ….

มีState ประเภท อื่นนอกเหนือจากState<T>หรือMutableState<T>การเขียนยังรองรับสิ่งต่อไปนี้:

  • ข้อมูลสด
  • ไหล
  • RxJava2

ขอบคุณที่อ่าน :)

อ้างอิง :