Animated API createAnimatedComponent делает ссылку FlatList неопределенной в react-native

Я пытаюсь использовать функцию scrollToIndex из FlatList в режиме реакции. Однако, когда я переключаю FlatList на createAnimatedComponent(FlatList), его ref становится undefined.

Есть ли способ сохранить FlatList из ref, когда я использую createAnimatedComponent?

Спасибо за твою заботу.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
3 700
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

в настоящее время createAnimatedComponent предоставляет метод под названием getNode(), который должен работать для получения ссылки на базовый компонент. Вот 2 примера, один со старыми ссылками, а другой с новыми.

// old ref style
class DemoComp extends Component {
  componentDidMount() {
    // setTimeout is needed for scrollToOffset ¯\_(ツ)_/¯
    setTimeout(() => {
      this.listRef.getNode().scrollToOffset({ offset: 100, animated: true });
    }, 0);
  }

  render() {
    return <Animated.FlatList ref = {r => { this.listRef = r; }} {...otherProps} />;
  }
}

// new ref style
class DemoComp extends Component {
  listRef = React.createRef();

  componentDidMount() {
    // setTimeout is needed for scrollToOffset ¯\_(ツ)_/¯
    setTimeout(() => {
      this.listRef.current.getNode().scrollToOffset({ offset: 100, animated: true });
    }, 0);
  }

  render() {
    return <Animated.FlatList ref = {this.listRef} {...otherProps} />;
  }
}

В конце концов, в будущем createAnimatedComponent переключится на «перенаправленные ссылки», которые будут работать только с новым стилем. Но этот день еще далек от того, что все библиотеки зависят от старого стиля.

PS. Если вы читаете это в далеком будущем, вы можете проверить статус перенаправленных ссылок в createAnimatedComponent здесь: https://github.com/facebook/react-native/issues/19650

Работает, когда offset положительный. Когда он отрицательный, scrollToOffset не работает.

李华良 21.11.2019 06:37

Другие вопросы по теме