React native 将侦听器添加到差异钳位,反应为本机

React native 将侦听器添加到差异钳位,反应为本机,react-native,listener,clamp,React Native,Listener,Clamp,正在尝试将侦听器添加到react native中的动画差异夹紧,以允许更改两个非动画属性 它最初执行正确,但当屏幕滚动超过其max属性时,会抛出“非法节点”错误 “设置为动画.DiffClamp的输入的非法节点ID” 关于这方面的大多数文章已经过时好几年了,建议您不能将侦听器添加到diff-clamp中。但是,它确实可以工作(现在?),但只有在构造函数中声明时才能工作 并非所有情况都允许它出现在上面,因为它不在渲染内部时不会响应状态更改。内部渲染在达到最大值并抛出上面的错误之前执行良好 Rend

正在尝试将侦听器添加到react native中的
动画差异夹紧
,以允许更改两个非动画属性

它最初执行正确,但当屏幕滚动超过其max属性时,会抛出“非法节点”错误

“设置为动画.DiffClamp的输入的非法节点ID”

关于这方面的大多数文章已经过时好几年了,建议您不能将侦听器添加到diff-clamp中。但是,它确实可以工作(现在?),但只有在构造函数中声明时才能工作

并非所有情况都允许它出现在上面,因为它不在渲染内部时不会响应状态更改。内部渲染在达到最大值并抛出上面的错误之前执行良好

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中输出其当前值,则它将继续正确执行,尽管“非法”错误完全阻塞了屏幕

  • 是否可以将侦听器添加到差异钳位
  • 如果不是,那么如果DiffClamp在构造函数中,它为什么工作
  • 假设第一个问题是否定的,而我又没有在什么地方把事情搞砸,这里有解决办法吗

这解决了问题,但似乎是一个非常不必要的解决办法

  • 当在渲染中声明一个已设置动画的Diff-Clamp时,我们似乎无法将侦听器“合法地”添加到该Diff-Clamp。(尽管我们可以在控制台日志中看到它在工作,但屏幕上还是出现了一个错误)

  • 解决方法是取Diff钳位的值,并将其插值到一个新变量中

  • //

    另外,为了让听者有话要听,你将不得不失去在上下文中合法化的yHeader_来代替yHeader

    const yHeader = Animated.diffClamp(
        this.props._yScroll.interpolate({
            inputRange: [0, 48],
            outputRange: [0, -48],
            extrapolateLeft: 'clamp',
        }),
    -48, 0)
    
    const yHeader_legalised = yHeader.interpolate({
        inputRange: [0, 1],
        outputRange: [0, 1],
    })
    
     yHeader_legalised.addListener(
         Animated.event([{value: this.value.ySearch}], {useNativeDriver: false})
     )