วงจรชีวิตของฟังก์ชันที่ประกอบได้
![](https://post.nghiatu.com/assets/images/m/max/724/1*GPupoVzXgJyK8otpFM7w4w.png)
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
, ฯลฯ) จะไม่มีการจัดเรียงใหม่
แล้วจะแปลงประเภทที่เสถียรเหล่านี้เป็นประเภทที่สามารถนำไปสู่การจัดองค์ประกอบใหม่ได้อย่างไร
ตามเอกสาร อย่างเป็นทางการ :
ฟังก์ชันที่ประกอบได้สามารถใช้remember
API เพื่อจัดเก็บวัตถุในหน่วยความจำ ค่าที่คำนวณโดย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
ขอบคุณที่อ่าน :)
อ้างอิง :