اذهب إلى المحتوى

السؤال

نشر

هذا ما أحاول تصميمه 

604374663be35_.png.b3a08e2348e6a65b269bf58be3ce3b34.png

وكل شئ جيد ماعدا السهمين اليمينى واليسارى انا حاولت كمحاولة ابتدائية ان أضع Button عادى لكى اجر ب انا احرك الى اليمين او اليسار وقمت بعمل   initialScrollIndex={1} لكى اجعل ال FlatList تعرض الايتم صاحبة هذا الاندكس .. المهم حاولت ان اعمل ال Button يزيد او ينقص عن طريق ال useState كما فى الكود التانى 

function MainScreen() {
  const [index, setIndex] = useState(0);

  return (
    <View style={styles.con}>

      <Button title="Next" onPress={() => setIndex(index +1)} />

      <FlatList
        data={data} 
        keyExtractor={(item) => item.id.toString()}
        style={{
          flex: 1,
          marginVertical: phoneHeight * 0.15,
        }}
        renderItem={
          ({item}) => <ScrollerCakes image={item.image} title={item.title} /> 
        }
        pagingEnabled 
        horizontal 
        showsHorizontalScrollIndicator={false} 
        initialScrollIndex={index}  // لكنها لم تنفع لانها القيمة الابتدائية فقط
      />
    </View>
  );
}

حيث عندما انقر الزر فان ال index (State) تزداد بمقدار 1 لكن هذه الطريقة لم تنفع لاننى هنا استخدم initialScrollIndex والذى يعنى انه يعمل فى البداية فقط .. 
انا اريد حل لهذه المشكلة وهى اننى عندما اضغط على زر فانه يذهب الى index التالى وهكذا ..  وشكرا مقدما 

Recommended Posts

  • 1
نشر (معدل)

يمكنك إستخدام scrollToIndex وهي method جاهزة تأتي مع FlatList للذهاب إلى index معين.

لاحظ أن scrollToIndex تأخذ object وليس رقم. فيمكنك إعطائها object وبداخل هذا الـ object ستضع property إسمها index تساوي الـ index التالي.

أولاً، يجب عليك أن تحصل على reference للـ FlatList عن طريق useRef هكذا:

function App() {
	const flatListRef = React.useRef(null);
	const [index, setIndex] = React.useState(0);

	const goForward = () => {
		setIndex(index + 1);
		flatListRef.scrollToIndex({ index: index, animated: true });
	};

	return (
		<FlatList
			ref={flatListRef}
			data={cakes}
			renderItem={renderItem}
		/>
	);
}

يوجد لدى FlatList الكثير من الـ methods والخصائص. يمكنك دائماً أن تتفقد صفحة الـ API لهذا الـ component من هنا.

تم التعديل في بواسطة إسلام عبدالعزيز
إضافة مثال
  • 0
نشر

يمكنك انشاء مرجع له علاقة ب flatlist وذلك لتتمكن من الوصول للخاصية scrollToIndex ثم تقوم بتغيير ال state باستخدام الأزرار و هكذا scrollToIndex ستحصل على القيمة index داخل useeffect

function MainScreen() {
  const [index, setIndex] = useState(0);
  
  const refContainer = useRef();// أنشئ مرجع 
  
  useeffect(()=> {// 
   refContainer.current.scrollToIndex({ animated: true, index }); // تغيير على حسب قيمة ستايت
  },[index])

  

  return (
    <View style={styles.con}>

      <Button title="Next" onPress={() => setIndex(index +1)} /> 
	 <Button title="Previous" onPress={() => setIndex(index -1)} /> 

      <FlatList
		ref={refContainer} //مرجع 
        data={data} 
        keyExtractor={(item) => item.id.toString()}
        style={{
          flex: 1,
          marginVertical: phoneHeight * 0.15,
        }}
        renderItem={
          ({item}) => <ScrollerCakes image={item.image} title={item.title} /> 
        }
        pagingEnabled 
        horizontal 
        showsHorizontalScrollIndicator={false} 
        initialScrollIndex={index}  
      />
    </View>
  );
}

 

  • 0
نشر
بتاريخ 16 ساعات قال إسلام عبدالعزيز:

يمكنك إستخدام scrollToIndex وهي method جاهزة تأتي مع FlatList للذهاب إلى index معين.

لاحظ أن scrollToIndex تأخذ object وليس رقم. فيمكنك إعطائها object وبداخل هذا الـ object ستضع property إسمها index تساوي الـ index التالي.

أولاً، يجب عليك أن تحصل على reference للـ FlatList عن طريق useRef هكذا:


function App() {
	const flatListRef = React.
بتاريخ 16 ساعات قال إسلام عبدالعزيز:

يمكنك إستخدام scrollToIndex وهي method جاهزة تأتي مع FlatList للذهاب إلى index معين.

لاحظ أن scrollToIndex تأخذ object وليس رقم. فيمكنك إعطائها object وبداخل هذا الـ object ستضع property إسمها index تساوي الـ index التالي.

أولاً، يجب عليك أن تحصل على reference للـ FlatList عن طريق useRef هكذا:


function App() {
	const flatListRef = React.useRef(null);
	const [index, setIndex] = React.useState(0);

	const goForward = () => {
		setIndex(index + 1);
		flatListRef.scrollToIndex({ index: index, animated: true });
	};

	return (
		<FlatList
			ref={flatListRef}
			data={cakes}
			renderItem={renderItem}
		/>
	);
}

يوجد لدى FlatList الكثير من الـ methods والخصائص. يمكنك دائماً أن تتفقد صفحة الـ API لهذا الـ component من هنا.

حل رائع لكن اعتقد ان به خطأ لانه ظهر لى هذا الخطأ 

flatListRef.scrollToIndex is not a function. (In 'flatListRef.scrollToIndex({
        index: index,
        animated: true
      })', 'flatListRef.scrollToIndex' is undefined)


 

  • 1
نشر
بتاريخ 15 ساعات قال Ahmed Sawy:

حل رائع لكن اعتقد ان به خطأ لانه ظهر لى هذا الخطأ 
 


flatListRef.scrollToIndex is not a function. (In 'flatListRef.scrollToIndex({
        index: index,
        animated: true
      })', 'flatListRef.scrollToIndex' is undefined)

 

لقد قمت بتعديل الإجابة. يجب أن نستخدم الـ references بإستخدام current:

flatListRef.current.scrollToIndex({ ... })

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...