CreateAnimatedComponent API-интерфейса делает ссылку на FlatList неопределенной в реагирующем

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

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

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

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

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