2016-02-16 1 views
3

У меня есть ScrollView в моем приложении React Native, и у меня есть несколько вещей, которые нужно сделать на основе текущей позиции прокрутки - некоторые из них - самим ScrollView, а некоторые - анимацией других компонентов.In React Native - можно ли добавить слушателя в Анимированное значение, полученное через реквизиты?

В идеале я хотел бы передать Animated.Value позиции прокрутки другим компонентам через их реквизиты и добавить их к значению и выполнить свою задачу. Но, как я понимаю, слушатель должен быть добавлен в componentWillMount, где у меня пока нет доступа к реквизитам. Поэтому я вынужден выполнять всю работу по прослушиванию значения в верхнем компоненте, который содержит как ScrollView, так и другие компоненты, которые зависят от него.

Мой идеальный код бы что-то вроде:

<MyTopComponent> 
    <ScrollView onScroll={Animated.event([{nativeEvent: {contentOffset: {y: this.state.scrollPositionY}}}])} 
    <OtherComponentA scrollPositionY={this.state.scrollPositionY} /> 
    <OtherComponentB /> 
</MyTopComponent> 

А потом внутри OtherComponentA:

this.props.scrollPositionY.addListener(this._listener.bind(this)); 

Но я не могу сделать это в OtherComponentA.componentWillMount, потому что реквизита не доступны все же. Поэтому я должен сделать это в MyTopComponent.componentWillMount.

Я что-то упустил?
Есть ли другой способ добавить слушателя на Animated.Value, полученный через опоры?

+0

Не уверен, что я полностью понимаю это требование, но не мог ли вы передать ссылку на функцию (в анимированное значение) в качестве опоры и просто использовать результат этой функции непосредственно в рендеринге цели? –

ответ

2

Добавить слушателя вместо componentDidMount().

+0

спасибо! который решил действительно раздражающую проблему дизайна для меня –

+0

Нет проблем. Рад, что я мог бы помочь :) –

Смежные вопросы