How to scroll to a specific element that can be modified? (React Native)

Issue

I created a glossary and want to have access to the content of a specific letter if I click on the letter (I have a list of letter at the top of my page).
But here is the issue: while I’ve found how to scroll down, I didn’t find how to scroll to a specific element.
It seems to be quite easy in HTML (Scroll to a specific Element Using html) but I didn’t find a solution for React Native.
I tried to create a ScrollToElement then use ref to fix it but it does not change if my variable change, it always go to the bottom of the page. Here is the code simplified:

  const fieldRef = React.useRef<HTMLInputElement>(null);
  const scrollToElement = () => fieldRef.current?.scrollIntoView();
...
 return (
    <View>
       <ScrollView>
          <View>
             {letter.map((letter) => {
              
                return (
                  <View>
                    <Text
                      onPress={scrollToElement}
                    >
                      {letter.name}
                    </Text>
                  </View>
                );
              })}
            </View>
            <View>
               {letter.map((letter) => {
                  return(
                    <View>

                    <div
                    ref={fieldRef}
                     >
                       <Text>
                          {letter.name}
                       </Text>
                    </div>

                   )
                  })}
             </View>
       </ScrollView>
    </View>
)






Solution

have you tried react-native-scroll-to-element node package ?
first you need to npm i react-native-scroll-to-element in your project then you can use it as this example :

import React, { useRef } from 'react';
import { Text, TouchableOpacity, View } from 'react-native';
import { SpecialScrollView, SpecialView } from 'react-native-scroll-to-element';

export default function () {
  const viewRef = useRef()

  return (
    <SpecialScrollView>
      <View
        style={{
          height: 400,
          backgroundColor: 'red'
        }}
      />
      <SpecialView
        style={{
          height: 50,
          backgroundColor: 'blue'
        }}
        ref={viewRef}
      >
        <TouchableOpacity
          onPress={() => viewRef.current.focus()}
        >
          <Text
            style={{
              color: 'white',
              fontSize: 20,
              padding: 10
            }}
          >
            Focus here
        </Text>
        </TouchableOpacity>
      </SpecialView>
      <View
        style={{
          height: 800,
          backgroundColor: 'green'
        }}
      />
    </SpecialScrollView>
  );
}

more about this package in this link

Answered By – Omar Dieh

Answer Checked By – Senaida (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.