Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 如何从另一个组件控制本机动画?_React Native_React Animated - Fatal编程技术网

React native 如何从另一个组件控制本机动画?

React native 如何从另一个组件控制本机动画?,react-native,react-animated,React Native,React Animated,我有一个这样的建筑。 目标是通过Child1在屏幕内外设置Child2动画 const[value]=useState(新的Animate.value(0)) Child1 Animated.time(props.value,{toValue:100,duration:300}) Child2 。。。 对于要发生的动画,我们无法更新状态,因为这将导致重新渲染,对吗 尝试在Child1中设置值的动画,但没有任何效果。这个建筑可能吗?如何从Child1控制Child2 您可以将回调作为属性传递

我有一个这样的建筑。
目标是通过
Child1
在屏幕内外设置
Child2
动画

const[value]=useState(新的Animate.value(0))
Child1

Animated.time(props.value,{toValue:100,duration:300})
Child2

。。。
  • 对于要发生的动画,我们无法更新状态,因为这将导致重新渲染,对吗

  • 尝试在Child1中设置
    值的动画,但没有任何效果。这个建筑可能吗?如何从Child1控制Child2


  • 您可以将回调作为属性传递给您的孩子并从那里调用它。大概是这样的:

    ...
    
    someCallback () {
        this.setState({//SET SOMETHING})
    }
    
    <Parent>
      <Child1 value={value} animationCallback={this.someCallback}>
    ...
    </Parent>
    
    。。。
    someCallback(){
    this.setState({//SET SOMETHING})
    }
    ...
    

    在您的孩子体内,您可以使用
    this.props.animationCallback()

    调用它。首先,您需要使用
    Animated
    而不是
    Animate
    ,即
    Animated.View
    Animated.timeing

    您应该将
    动画.计时功能放入父组件中。将函数向下传递(作为道具)给要触发它的子级。然后将动画值向下传递给显示动画本身的子对象

    通过这种方式,您可以使动画由
    Child2
    中的某个内容触发,但动画本身发生在
    Child1
    中。我犯了一些错误。
    1.调用
    Aminate.timing
    而不调用
    .start()

    2.试图将
    Animate.Value
    传递给似乎不受支持的已设置样式的组件

    在使用带有内联样式的
    Animate.View
    之后,我实际上能够调用Child1来触发Child2中的动画

    Animated.time(props.value,{toValue:100,duration:300}).start()
    
    感谢您的关注。实际上我用了
    动画
    。这将解决这个问题。传递函数道具也很好。很公平,然后将这个问题标记为“已回答”。