Skip to content
Home » [Update] วิธีใช้ FlatList กับ Hooks ใน React Native | native language คือ – NATAVIGUIDES

[Update] วิธีใช้ FlatList กับ Hooks ใน React Native | native language คือ – NATAVIGUIDES

native language คือ: นี่คือโพสต์ที่เกี่ยวข้องกับหัวข้อนี้

เครดิตรูปภาพ: Tatiana Rodriguez

React Hooks?

Hooks เป็นฟังก์ชันจาวาสคริปต์ที่ช่วยให้เราใช้ state ได้โดยไม่ต้องเขียนคลาส

ดังนั้น Hooks จะถูกใช้ในส่วนประกอบของฟังก์ชันReact เท่านั้นแทนที่จะเป็นReact Component Classes

จำไว้ว่ากฎที่เราจำเป็นต้องทำตามทำและทำไม่ได้ตามที่ระบุไว้ในเอกสารเบ็ด

  • อย่าเรียก Hooks ภายในลูปหรือฟังก์ชันที่ซ้อนกันนับประสาอะไรกับตรรกะเงื่อนไข
  • Do Call Hooks ที่จุดบนสุดที่ฟังก์ชัน React ของคุณเริ่มทำงาน

ลองนึกภาพทฤษฎีการทำงานของลำดับหรือบางทีคุณอาจคิดว่าอาร์เรย์ทำงานอย่างไรเพื่อให้เข้าใจได้ดีขึ้น

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

เราอาจจะผ่านหัวข้อ“ การแกะกล่องวิธีการทำงานของ Hooks”ในบทความนี้หากคุณสนใจแน่นอนว่าคุณอาจพบบทความที่เกี่ยวข้องจากที่อื่น

ก่อนอื่น … Hooks use case!

กฎจำได้ไหม?

1. ใช้มันในส่วนประกอบที่ใช้งานได้แทนคลาส …

2. เรียกพวกเขาที่ด้านบนสุดซึ่งฟังก์ชันเริ่มต้น …

...
const ItemList = props => {
const [limit, setLimit] = useState(5);
   const [page, setPage] = useState(1);
   const [clientData, setClientData] = useState([]);
   const [serverData, serverDataLoaded] = useState([]);
   const [pending_process, setPending_process] = useState(true);
   const [loadmore, setLoadmore] = useState(false);
...
}

นี่คือสิ่งที่เราจะใช้เพื่อจำลองการตอบกลับที่ส่งคืนจากการเรียก API

// delay for 1500ms to simulate a API request time.
// we start with page = 1.
// itemList is a constants dataset as show above.
const ApiRequest = async thePage => {
  await setTimeout(() => {}, 1500);
  return itemList.slice((thePage - 1) * limit, thePage * limit);
};
const requestToServer = async thePage => {
   let data = await ApiRequest(thePage); 
   serverDataLoaded(data);
};

ต่อไปเราจะไปที่Hook “useEffect”

Hook “useEffect”ทำหน้าที่ในจุดประสงค์เดียวกันของกระบวนการอายุการใช้งานบางอย่างนั่นคือcomponentDidMount , componentDidUpdateและcomponentWillUnmountและจะทำผลข้างเคียงในองค์ประกอบการทำงานเฉพาะ

มาเรียกใช้“ API” แบบ DIY เป็นครั้งแรกเพื่อดึงข้อมูลด้วยHook“ useEffect” เราต้องการให้ Hook ทำงานเพียงครั้งเดียวเพื่อรับข้อมูลชุดแรกเมื่อแสดงผลครั้งแรก ดังนั้นเราจึงส่งอาร์เรย์ว่างไปยังอาร์กิวเมนต์ที่สอง

useEffect(() => {
  requestToServer(page); // page => 1
}, []);

เราเพิ่มสิ่งนี้เพื่อจัดการผลข้างเคียงของสถานะserverData
ดูตอนนี้อาร์กิวเมนต์ที่สองถูกป้อนด้วย [serverData] และเราคาดว่าจะมีผลข้างเคียงจากการเปลี่ยนแปลงสถานะserverData : เราจะรวมเข้ากับclientDataเพื่อแสดง

useEffect(() => {
   setClientData([...clientData, ...serverData]);
}, [serverData]);

useEffect(() => {
   requestToServer(page);
}, [page]);

const handleLoadMore = () => {
   setPage(page + 1);
};

Basic FlatList มีลักษณะดังนี้:

<FlatList
   data={clientData}
   renderItem={renderRow}
   onEndReached={handleLoadMore}
   onEndReachedThreshold={0.1}
   onRefresh={() => onRefresh()}
/>

สิ่งที่ต้องเน้นเพิ่มเติมเล็กน้อยที่นี่:

  • onEndReachedThreshold | จำนวน
  • onEndReached | ฟังก์ชัน
  • onRefresh | ฟังก์ชัน
  • pending_process | สถานะ
  • โหลดเพิ่มเติม | สถานะ

เป็นหน่วยวัดระยะห่างจากขอบด้านล่างของรายการก่อนที่จะonEndReached โทรกลับจะถูกเรียก มีค่าตั้งแต่ 0 – 1 สำหรับค่า 0.1 หมายความว่าเมื่อเนื้อหาถูกเลื่อนถึง90%ของความยาวที่มองเห็นได้onEndReachedจะเริ่มทำงาน!

onRefresh

เป็นการเรียกกลับสำหรับการรีเฟรช การรีเฟรชที่นี่หมายความว่าอย่างไร เป็นพฤติกรรม“ดึงเพื่อรีเฟรช” !

pending_process

เป็นสถานะที่เราใช้เพื่อควบคุมเวลาร้องขอของการเรียก API ทีละรายการเพื่อประโยชน์ในการจัดการข้อมูลและป้องกันสแปม API!

ในขณะที่โหลดเพิ่มเติม

เป็นอีกสถานะหนึ่งที่เราติดตามเพื่อให้สิทธิ์สำหรับการเรียก API ในภายหลังเมื่อมีบันทึกมา!

สังเกตบันทึกด้านล่างเพื่อติดตามได้ดีขึ้น…😉

เอาท์พุต:

FlatList อย่างง่ายพร้อมคำขอ Mock API

ประการที่สาม… API เคลื่อนไหว!

ดูโครงกระดูกสำหรับ Animated.FlatList ด้านล่าง:

import { Animated } from 'react-native';
const ItemList = props => {
  ...
  const [scrollY, setScrollY] = useState(new Animated.Value(0));
  const [op, setOp] = useState(
     scrollY.interpolate({
        inputRange: [0, 50, 100, 150],
        outputRange: [1, 0.5, 0.25, 0]
     }));
   ...
const renderRow = ({item, index, separators}) => {
      return (
        <Animated.View style={{opacity: op}}>
           <ListItem
              style={{ 
                height: ITEM_HEIGHT, 
                backgroundColor: Constants.COLOR.GOLD
              }}>
             <Text style={{color: 'white'}}>{item.name}</Text
           </ListItem>
         </Animated.View>
      )
   }
   ...
return (
      <Animated.FlatList
         ...
         onScroll={Animated.event(
          [
           {
             nativeEvent: {contentOffset: {y: scrollY}},
           },
          ],
          {
            useNativeDriver: true,
            listener: handleScroll
          },
         )}
       />
   );
}

ถูกกำหนดให้ทำหน้าที่เป็นอินสแตนซ์เคลื่อนไหวโดยมีค่าเริ่มต้นเป็น 0

Op : scrollY.interpolate ({inputRange, outputRange})

คือรูปแบบที่เปลี่ยนไปในแง่ของความทึบ[outputRange]เมื่อเทียบกับแกน Y แบบเลื่อน[inputRange] ที่เราคาดไว้

เราจะเพิ่มตรรกะ และการคำนวณบางอย่างสำหรับค่าเคลื่อนไหวใหม่ และเนื้อหาสุดท้ายจะคล้ายกับ …

และผลลัพธ์:

เลื่อนไปที่การเปลี่ยนความทึบด้านบน

ใช่แล้ว! และในที่สุด … เรากำลังมุ่งหน้าไปยังการกำหนดค่าการเพิ่มประสิทธิภาพสำหรับ FlatList!

การปรับแต่งพิเศษ?

1. ใช้ getItemLayout

วิธีนี้เป็นที่ต้องการอย่างมากเนื่องจากจะช่วยลดความต้องการ FlatList ในการรันกระบวนการคำนวณเค้าโครงแบบอะซิงโครนัสบางอย่างหากเราได้กำหนดความสูงสำหรับแต่ละรายการ

2. ใช้อุปกรณ์ประกอบฉาก keyExtractor กับ FlatList

FlatList ใช้อุปกรณ์ประกอบฉากนี้เพื่อทำการแคชและติดตามโดยใช้คีย์ที่ให้มาเป็นหลัก

3. หลีกเลี่ยงการป้อนฟังก์ชันนิรนามให้กับอุปกรณ์ประกอบฉาก “renderItem”

เราเคยย้ายฟังก์ชัน“renderItem”ออกเพื่อป้องกันไม่ให้เกิดการพักผ่อนในแต่ละขั้นตอนการแสดงผล

4. ใช้ useMemo Hooks เพื่อแทนที่ “shouldComponentUpdate”

เราใช้ useMemo Hooks เพื่อสังเกตการเปลี่ยนแปลงของอุปกรณ์ประกอบฉากก่อนแสดงผล ดังที่เคยทำโดย“ shouldComponentUpdate”กับPureComponentของ React

สรุป :

import React, {useState, useEffect, useMemo} from 'react';
import { Dimensions } from 'react-native';
...
...
const {height} = Dimensions.get('window');
const ITEM_HEIGHT = height * 0.25;
const ItemListDemo = props => {
   ...
   ...
const keyExtractor = (item, index) => item.id;
   const getItemLayout = (data, index) => ({
      length: ITEM_HEIGHT,
      offset: ITEM_HEIGHT * index,
      index
   });
return useMemo(() => {
       return (
           <FlatList
             ...
             keyExtractor={keyExtractor}
             data={clientData}
             renderItem={renderRow}
             getItemLayout={getItemLayout}
           />
       );
     }, [clientData, fadingIndex]);
   };
}

เราได้เรียนรู้พื้นฐานสำหรับReact Hooksจากส่วนแรกของบทความและเราได้พบกับประสบการณ์การเขียนโปรแกรมโดยใช้useStateและuseEffect Hooks ในส่วนต่อ ๆ ไป

ประการที่สองเราได้ดำเนินการผ่านFlatList ตั้งแต่เริ่มต้นด้วยตรรกะการดึงข้อมูลตามความต้องการตามด้วยAnimated APIเพื่อควบคุมรูปแบบความทึบของรายการ

ในที่สุดเราก็ได้ผ่านการกำหนดค่าประสิทธิภาพบางอย่างสำหรับFlatListในReact Native !

มันช่วย? มีความสุขในการเขียนโค้ด

หากสิ่งนี้นำทางคุณได้ดี คุณอาจจะแสดงความชื่นชม!

[Update] “เรียนคำเปรียบเปรยผ่านเพลงฮิต” เทคนิคเก็ตภาษาอังกฤษแบบ Native Speaker! | native language คือ – NATAVIGUIDES

มาถึงท่อนฮุกของเพลงกันค่ะ 

“Cause, baby, you‘re a firework”

“Come on, show ’em what you‘re worth”

      คำว่า “Firework” ในเพลงนี้ สื่อถึงว่าทุกๆ คนก็เหมือนกับดอกไม้ไฟ เหมือนกับพลุ ที่มีความพิเศษ ทุกคนสามารถที่จะทำสิ่งต่างๆ ออกมาให้ดีได้ จงออกไปแสดงความสามารถของเธอให้ทุกคนเห็นซะ

ว่าในตัวทุกคนมีดีอยู่ แค่ขอให้เชื่อมั่นในตัวเอง กล้าเอาไว้ แล้วก็แสดงมันออกมา

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

(จุด=สร้างความเชื่อมั่นให้ตัวเอง) ก็จะกลายเป็นแสงสว่างที่งดงาม

เพลงต่อไปคือเพลง

“Red” ของ Taylor Swift 

ยกตัวอย่าง

อุปลักษณ์ในเนื้อเพลง

ที่ Taylor เปรียบความรู้สึกของเธอกับคนรักเป็นสีต่างๆ 

 
– “Losing him was blue like I’d never known”

 ความหมายของคำว่า Blue ที่เรารู้ๆ กัน คือ สีฟ้าและความเศร้า ซึ่งในความหมายนี้หมายถึงว่า สูญเสียเขาไปนั้นเหมือนกับสีฟ้า
 

– “Missing him was dark grey all alone”

คำว่า Grey ในที่นี้หมายถึงสีเทาที่แสถงถึงความเหงา เปล่าเปลี่ยวเพียงลำพัง ความหมายก็คือ การคิดถึงเขามันก็เหมือนกับสีเทาเข้มๆ เหงาๆ อยู่เพียงลำพัง 

– “Loving him was red

สีแดงที่อยู่ในเนื้อเพลงนี้แสดงถึงหลากหลายทางอารมณ์ ทั้งความรัก ความโกรธ ความสับสน ที่ตัว Taylor มีความรู้สึกกับคนรักของเธอ โดยที่อารมณ์เหล่านั้นเหมือนกับสีแดงนั่นเองค่ะ 
 

ยกตัวอย่างอุปมาในเพลง โดยมีคำว่า ‘Like’ เปรียบเทียบอยู่ในเพลง 

– “Forgetting him was like trying to know somebody you never met”

การลืมเขาก็เหมือนกับการพยายามจะทำความรู้จักกับคนที่ไม่เคยพบ 

– “Fighting with him was like trying to solve a crossword and realizing there’s no right answer” 

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

จากทั้งสองเนื้อเพลงจะเห็นได้ว่า มีการใช้คำว่า ‘Like’ เพื่อเปรียบเทียบความรู้สึกของเธอต่อคนรักเป็นสิ่งอื่น 
 


ข้อดี-ข้อเสีย ระหว่าง React-Native-Expo กับ React-Native-CLI


หากท่านอยากสนับสนุนเรา CMDev Channel ท่านสามารถช่วยเราได้ เพียงแค่แวะเข้าไปชมหลักสูตรของเราที่ www.codemobiles.com ซึ่งหลักสูตรเนื้อหาเข้มข้นมากมาย ทั้งแบบเรียนที่ Office ของ CodeMobiles หรือ แบบเร่งรัดที่เป็น Video Online พร้อม source code เวอร์ชั่นเต็ม พร้อมสามารถปรึกษากับอาจารย์ เมื่อติดปัญหาขณะทำ Workshop ในหลักสูตร
ตัวอย่างหลักสูตรของเรา
Angular / NodeJS / Express / MongoDB Programming
ASP .NET Core
Android Programming
iOS Programming
UX/UI
Xamarin Programming
Ionic Programming
Automated Text
IoT Programming
Sourcecode และ วีดีโอ
CMDev Channel ช่องสอนเขียนแอพบนมือถือ Android, iOS, Modern Web Technology, IoT and UX/UI โดย http://www.codemobiles.com
Subscribe : http://goo.gl/9K373V
สั่งซื้อ Video พร้อม Source Code : http://goo.gl/hlcM2U
เรียนสดกับอาจารย์ผู้สอน : http://goo.gl/660pFu
พูดคุยแลกเปลี่ยนความคิดเห็นกับเราได้ที่ : https://goo.gl/EjTioc
เช่าห้องอบรมสัมมนาเครื่อง Mac : http://goo.gl/7YoOqT
Website : http://www.codemobiles.com
Facebook : http://www.facebook.com/CodeMobilesTrainingCenter

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

ข้อดี-ข้อเสีย ระหว่าง React-Native-Expo กับ React-Native-CLI

2 Hours of English Conversation Practice – Improve Speaking Skills


This is the best video to get started with English daily conversations! https://bit.ly/2IqBzJE Click here to access personalized lessons, tons of video series, wordlists and more!
Step 1: Go to https://bit.ly/2IqBzJE
Step 2: Sign up for a Free Lifetime Account No money, No credit card required
Step 3: Achieve Your Learning Goal and master English the fast, fun and easy way!
In this video, you’ll learn all the words and phrases you need to improve your English speaking skills and be able to have a conversation with a English native speaker.. This is THE place to start if you want to start learning English, and improve both your listening and speaking skills.
Follow us here:
■ Facebook: https://www.facebook.com/EnglishClass101
■ Instagram: https://www.instagram.com/EnglishClass101
■ Twitter: https://twitter.com/EnglishClass101
■ Alisha’s Instagram: https://www.instagram.com/arishaintokyo
■ Alisha’s Twitter: https://twitter.com/arishaintokyo

Also, please LIKE, SHARE and COMMENT on our videos! We really appreciate it. Thanks!
English LearnEnglish the United States EnglishLanguage EnglishClass101

2 Hours of English Conversation Practice - Improve Speaking Skills

English Listening Practice Level 1 | Listening English Practice for Beginners


English Listening Practice Level 1 | Listening English Practice for Beginners
───────────────────
🛎 Please subscribe to update new videos.
☞ Please share and like if you enjoyed the video 🙂 thanks so much ♥
Subscribe To Update New Lesson: http://bit.ly/EnglishFukEn
───────────────────
This video: Copyright 2019. Learn English FukEn. All Rights Reserved.
learnenglish englishconversation learnenglishfuken

English Listening Practice Level 1 | Listening English Practice for Beginners

Learning a language? Speak it like you’re playing a video game | Marianna Pascal | TEDxPenangRoad


Marianna Pascal shows how the secret to speaking a new language with confidence is all about attitude, not ability.
Marianna Pascal helps professionals achieve greater success in life by communicating effectively in English. Marianna began her career as an actor and performed across her native Canada in film television and on stage for 15 years. Today, Marianna improves the way employees relate to their bosses, clients, colleagues and other key stakeholders. Marianna is also the Official Communication Trainer for Miss Malaysia World.
An awardwining speaker, Marianna is known for her humorous speech on Youtube titled \”Local English or Standard English\” which has been seen by over a million people worldwide. Marianna is also the author of the bestselling book series English Fast \u0026 Easy. The most recent was 2 on Borders’ BestSelling List for nonfiction.

This talk was given at a TEDx event using the TED conference format but independently organized by a local community. Learn more at http://ted.com/tedx

Learning a language? Speak it like you’re playing a video game | Marianna Pascal | TEDxPenangRoad

Improve Your American Accent Fast – 4 TIPS


Improve you American Accent fast. Here are my 4 tips.
Here is the whole interview on Alex Lyon’s channel: https://www.youtube.com/watch?v=P9Fz8DBfY6s
Accurate English social media:
visit website: https://www.accurateenglish.com
Instagram: https://www.instagram.com/accurateenglish
TWITTER: https://twitter.com/LisaMojsin
https://www.facebook.com/AccurateEnglishLisa

Improve Your American Accent Fast - 4 TIPS

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

ขอบคุณที่รับชมกระทู้ครับ native language คือ

Leave a Reply

Your email address will not be published. Required fields are marked *