Почему поток JS удаляет фреймы при использовании React Native Reanimated?

#react-native #react-native-reanimated

#react-native #react-native-реанимированный

Вопрос:

Я не уверен, почему поток JS удаляет фреймы, когда я переключаю высоту представления при использовании react-native-reanimated v2? Когда я нажимаю кнопку, кадры JS составляют около 50-55, а частота кадров в секунду потока пользовательского интерфейса остается 60. Спасибо.

Мой код довольно прост:

 import React, {useEffect} from 'react';
import {
  Button,
  ImageBackground,
  StatusBar,
  StyleSheet,
  Text,
  ViewStyle,
} from 'react-native';
import Animated, {
  useAnimatedStyle,
  useSharedValue,
  withTiming,
} from 'react-native-reanimated';

export const TestingScreen: React.FC<TestingScreenProps> = () => {

const height = useSharedValue(0);

const style = useAnimatedStyle(() => {
  return {
    height: withTiming(height.value),
  };
});

return (
  <>
    <StatusBar barStyle="dark-content" />
    <ImageBackground
      style={styles.container}
      source={require('./../../../assets/images/cinema.jpg')}
      resizeMode={'cover'}>
      <Animated.View style={[styles.form, style]}>
        <View
          style={{
            width: 150,
            height: 150,
            backgroundColor: 'red',
          }}></View>
      </Animated.View>
      <Button
        title={'Toogle'}
        onPress={() =>
          (height.value =SCREEN_HEIGHT * Math.random())
        }
      />
      <Text
        style={{fontSize: 23, color: 'white', fontFamily: 'OpenSans-Italic'}}>
        TESTING
      </Text>
    </ImageBackground>
  </>
);
};
  

Ответ №1:

Я думаю, это потому, что функция нажатия кнопки (onPress prop) находится на стороне JS. Итак, основная часть происходит в потоке JS. Вот почему фреймы JS удаляются при нажатии кнопки.