尝试动画反应本机文本值

Jer*_*emy 5 reactjs react-native react-animated

所以基本上我试图让这个渲染函数实时更新值(截至目前它只是在完成动画后跳转到最终值)

this.state = {
  pleaseDisplayMe: Animated.value(0);
}

triggerAnimation(){
  Animated.timing(
        this.state.pleaseDisplayMe,
        {toValue: 100,
        duration: 5000}
      ).start();
}

render(){
  return  <Animated.Text>{this.state.pleaseDisplayMe}</Animated.Text>
}
Run Code Online (Sandbox Code Playgroud)

我觉得因为这个库可以在引擎盖下动画值,然后必须有一种方法来显示发生了什么.或者是否可以通过样式提供某种内容/价值属性?

我已经尝试自定义编写我自己的setInterval函数,但我需要它与其他动画的时间排序更好,我喜欢访问RN的Easing库!

谢谢!

Mic*_*eng 5

React Native 有你可以使用的计时器。例如,要使用 setInterval 执行您要完成的操作:

state = {pleaseDisplayMe: 0}

componentDidMount() {
  setInterval(() => {
    this.setState({pleaseDisplayMe: this.state.pleaseDisplayMe + 1})
  }, 1000);
}

render() {
  return (
    <Text>{this.state.pleaseDisplayMe}</Text>
  )
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试从动画中实际获取值,则应将侦听器附加到 Animated 并从那里获取值,因为无法同步读取该值,因为它可能是本机驱动的。一个可能非常糟糕(我也是 React Native 的新手)的例子是这样的:

state = {
  pleaseDisplayMe: new Animated.Value(0),
  value: 0,
}

triggerAnimation(){
  this.state.pleaseDisplayMe.addListener(({value}) => this.setState({value: value}));
  Animated.timing(
    this.state.pleaseDisplayMe,
    {toValue: 100,
    duration: 5000}
  ).start();
}

render() {
  return (
    <Text>{this.state.value}</Text>
  )
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,每次 triggerAnimation 被调用时,您都会绑定一个新的侦听器。而且您并没有删除侦听器。 (3认同)