Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

องค์ประกอบ SectionList คืออะไรและใช้งานอย่างไรใน React Native


อินเทอร์เฟซที่ช่วยแสดงรายการในส่วนต่างๆ คุณสมบัติที่สำคัญบางประการของ SectionList คือ −

  • รองรับส่วนหัว/ส่วนท้ายของรายการ
  • รองรับส่วนหัว/ส่วนท้ายของส่วน
  • เลื่อนโหลด
  • ดึงเพื่อรีเฟรช
  • ข้ามแพลตฟอร์มอย่างสมบูรณ์

องค์ประกอบ SectionList พื้นฐานมีลักษณะดังนี้ -

<SectionList sections={DataContainer} keyExtractor={yourkeyextractor} renderItem={yourenderItem} renderSectionHeader={yoursectionheader} />

ในการทำงานกับ SectionList ให้นำเข้าส่วนประกอบดังที่แสดงด้านล่าง -

import { SectionList } from "react-native";

นี่คือรายการคุณสมบัติที่สำคัญที่มีอยู่ใน SectionList -

อุปกรณ์ประกอบฉาก คำอธิบาย
renderItem เป็นฟังก์ชันเริ่มต้นที่แสดงไอเท็มในส่วน มันส่งกลับองค์ประกอบปฏิกิริยา
ฟังก์ชั่นการแสดงผลจะถูกส่งต่อไปยังsectionlist เหมือนวัตถุที่มีคีย์ดังต่อไปนี้ −
'item'(object) - สิ่งของสิ่งของ
'ดัชนี' (ตัวเลข) - ดัชนีที่กำหนดให้กับรายการภายในส่วน
'ส่วน' (วัตถุ) - วัตถุส่วน
'ตัวคั่น' (วัตถุ) - เป็นวัตถุที่มีคีย์ต่อไปนี้ −

  • ไฮไลท์' (ฟังก์ชัน) - () => โมฆะ
  • 'unhighlight' (ฟังก์ชัน) - () => โมฆะ
  • 'updateProps' (ฟังก์ชัน) - (เลือก newProps) => โมฆะ
  • 'select' (enum) - ค่าคือ 'leading', 'trailing'
  • 'newProps' (วัตถุ)

ส่วน ข้อมูลที่จะแสดงผล
renderSectionHeader เนื้อหาจะแสดงที่ด้านบน ใน iOS คุณจะเห็นว่าเนื้อหาอยู่ที่ด้านบนสุด
renderSectionFooter เนื้อหาจะแสดงที่ด้านล่าง
กำลังรีเฟรช เมื่อรีเฟรชหากมีการแสดงข้อมูลใหม่ ให้ตั้งค่าคุณสมบัตินี้เป็นจริง
ListEmptyComponent คลาสส่วนประกอบ ฟังก์ชันการแสดงผล หรือองค์ประกอบ arender ที่จะถูกเรียกใช้เมื่อรายการว่างเปล่า ในกรณีที่คุณต้องการทำอะไรเมื่อรายการว่างเปล่านี้ส่วนประกอบจะเป็นประโยชน์
ListFooterComponent คลาสส่วนประกอบ ฟังก์ชันการแสดงผล หรือองค์ประกอบ arender ที่จะได้รับการแสดงผลที่ด้านล่างของรายการทั้งหมด
ListFooterComponentStyle การจัดรูปแบบที่จำเป็นสำหรับส่วนประกอบส่วนท้ายสามารถทำได้ที่นี่
ListHeaderComponent คลาสส่วนประกอบ ฟังก์ชันการแสดงผล หรือองค์ประกอบ arender ที่จะได้รับการแสดงผลที่ด้านบนของรายการทั้งหมด
ListHeaderComponentStyle การกำหนดสไตล์ที่จำเป็นสำหรับส่วนประกอบส่วนหัวสามารถทำได้ที่นี่
keyExtractor แยกคีย์เฉพาะสำหรับดัชนีที่กำหนด คีย์นี้ใช้สำหรับแคชและยังใช้เพื่อติดตามการเรียงลำดับรายการใหม่

ตัวอย่างที่ 1:การใช้ SectionList เพื่อแสดงข้อมูล

ในการทำงานกับ SectionList เราต้องนำเข้าก่อนดังที่แสดงด้านล่าง -

import { SectionList , Text, View, StyleSheet} from "react-native";

เมื่อนำเข้าเสร็จแล้ว ฉันต้องการข้อมูลที่จะแสดงใน SectionList ข้อมูลถูกเก็บไว้ใน this.state.data ดังแสดงด้านล่าง -

this.state = {
   data: [
      {
         title: "Javascript Frameworks",
         data: ["Angular", "ReactJS", "VueJS", "ReactNative"]
      },
      {
         title: "PHP Frameworks",
         data: ["Laravel", "CodeIgniter", "CakePHP", "Symfony"]
      }
   ]
};

การใช้งานฟังก์ชันสำหรับ renderItem

ฟังก์ชันด้านล่างดูแลรายการและแสดงเหมือนกันในองค์ประกอบข้อความดังที่แสดงด้านล่าง -

renderItem = ({ item }) => {
   return (
      <View style={styles.item}>
         <Text >
            {item}
         </Text>
      </View>
   );
};

คอมโพเนนต์ Text จะแสดงรายการและรวมอยู่ใน View Component

การใช้งาน SectionList

นี่คือการใช้งาน SectionList ที่มี data, renderItem, keyExtractor และ renderSectionHeader props

<View style={styles.container}>
   <SectionList
      sections={this.state.data}
      renderItem={this.renderItem}
      keyExtractor={(item, index) => index}
      renderSectionHeader={({ section: { title } }) => (
         <Text style={styles.header}>{title}</Text>
      )}
   />
</View>

this.state.data ให้กับ ข้อมูล อุปกรณ์ประกอบฉากและ this.renderItem ฟังก์ชั่นถูกกำหนดให้กับ renderItem อุปกรณ์ประกอบฉาก

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

ดังนั้นที่นี่คีย์ที่ไม่ซ้ำคือ item+index และถูกกำหนดให้กับ keyExtractor

keyExtractor={(item, index) => item + index}

renderSectionHeader อุปกรณ์ประกอบฉากดูแลการแสดงส่วนหัว

import React from "react";
import { SectionList , Text, View, StyleSheet} from "react-native";
export default class App extends React.Component {
   constructor() {
      super();
      this.state = {
      data: [
         {
            title: "Javascript Frameworks",
            data: ["Angular", "ReactJS", "VueJS", "ReactNative"]
         },
         {
            title: "PHP Frameworks",
            data: ["Laravel", "CodeIgniter", "CakePHP", "Symfony"]
         }
      ]
   };
}
renderItem = ({ item }) => {
   return (
      <View style={styles.item}>
         <Text >
            {item}
         </Text>
      </View>
   );
};
render() {
   return (
      <View style={styles.container}>
         <SectionList
            sections={this.state.data}
            renderItem={this.renderItem}
            keyExtractor={(item, index) => index}
            renderSectionHeader={({ section: { title } }) => (
                  <Text style={styles.header}>{title}</Text>
               )}
            />
         </View>
      );
   }
}
const styles = StyleSheet.create({
   container: {
      flex: 1,
      marginTop:20,
      marginHorizontal: 16
   },
   item: {
      backgroundColor: "#ccc2ff",
      padding: 20,
      marginVertical: 8
   },
   header: {
      fontSize: 32,
      backgroundColor: "#fff"
   }
});

ผลลัพธ์

องค์ประกอบ SectionList คืออะไรและใช้งานอย่างไรใน React Native

ตัวอย่างที่ 2

การเปิดใช้งาน StickySectionHeadersEnabled props ใน SectionList

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

import React from "react";
import { SectionList , Text, View, StyleSheet} from "react-native";
export default class App extends React.Component {
   constructor() {
      super();
      this.state = {
         data: [
            {
               title: "Javascript Frameworks",
               data: ["Angular", "ReactJS", "VueJS", "ReactNative"]
            },
            {
               title: "PHP Frameworks",
               data: ["Laravel", "CodeIgniter", "CakePHP", "Symfony"]
            },
            {
               title: "Apache Frameworks",
               data: ["Apache Flex", "Apache Crunch", "Apache CouchDB", "Apache Crail"]
            }
         ]
      };
   }
   renderItem = ({ item }) => {
      return (
         <View style={styles.item}>
            <Text >
               {item}
            </Text>
         </View>
      );
   };
   render() {
      return (
         <View style={styles.container}>
            <SectionList
               stickySectionHeadersEnabled={true}
               sections={this.state.data}
               renderItem={this.renderItem}
               keyExtractor={(item, index) => index}
               renderSectionHeader={({ section: { title } }) => (
                  <Text style={styles.header}>{title}</Text>
               )}
            />
         </View>
      );
   }
}
const styles = StyleSheet.create({
   container: {
      flex: 1,
      marginTop:20,
      marginHorizontal: 16
   },
   item: {
      backgroundColor: "#ccc2ff",
      padding: 20,
      marginVertical: 8
   },
   header: {
      fontSize: 32,
      backgroundColor: "#fff"
   }
});

ผลลัพธ์

องค์ประกอบ SectionList คืออะไรและใช้งานอย่างไรใน React Native