Попытка добавить слушателя к Animated Diff Clamp
в реагирующем нативе, чтобы разрешить изменение пары неанимированных свойств.
Первоначально он работает правильно, но выдает ошибку "недопустимый узел", когда Экран прокручивается за пределы своего свойства max.
"Недопустимый идентификатор узла, установленный как вход для Animated.DiffClamp"
Большинство статей по этому вопросу устарели на несколько лет и предлагают что вы не можете добавить слушателя к зажиму diff. Тем не менее, он работает (сейчас?), Но только если объявлен в конструкторе.
Не все ситуации позволяют ему быть там, поскольку он не реагирует на изменения состояния, когда не находится внутри рендера. Внутри рендера он работает нормально до достижения максимума и выдачи ошибки выше.
Render () {
const yHeader = Animated.diffClamp(
this.props._yScroll.interpolate({
inputRange: [0, 48],
outputRange: [0, -48],
extrapolateLeft: 'clamp',
}),
-48, 0)
yHeader.addListener(
Animated.event([{value: this.value.ySearch}], {useNativeDriver: false})
)
// this.value.search has been declared in the constructor as an Animated value and is waiting to receive the props. This is not the problem!
}
Если при возникновении ошибки все еще выполняется прокрутка, вы можете видеть, что она продолжает работать правильно, если вывести свое текущее значение в console.log, несмотря на «недопустимую» ошибку, полностью блокирующую экран.
- Можно ли добавить слушателя к зажиму Diff?
- Если нет, то почему он работает, если DiffClamp находится в конструкторе?
- Есть ли обходной путь, если предположить первый вопрос - нет, и я что-то не забил?