首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画与getDerivedStateFromProps

动画与getDerivedStateFromProps
EN

Stack Overflow用户
提问于 2018-06-01 10:43:15
回答 2查看 753关注 0票数 2

随着componentWillReceiveProps被弃用,替换的getDerivedStateFromProps返回最后的状态,我将如何随着时间的推移逐渐改变状态(即动画化的东西)与新的getDerivedStateFromProps

使用componentWillReceiveProps,以下功能可以很好地工作:

代码语言:javascript
复制
state = {
  itemOpacity: new Animated.Value(0.25)
};

componentWillReceiveProps(nextProps) {
  if (this.props.items.visible !== nextProps.items.visible) {

    let value = 0;

    if (nextProps.items.visible) {
      value = 1;
    }

    Animated.timing(this.state.itemOpacity, {
      toValue: value,
      duration: 200,
    }).start();
  }
}

我怎么用getDerivedStateFromProps做这样的事呢?还是我的动画模式太蠢了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 11:07:44

getDerivedStateFromProps是用newProps和previousState参数调用的。因此,您可以在动画中使用previousState:

代码语言:javascript
复制
static getDerivedStateFromProps(nextProps, prevState) {

  let value = 0;
  if (nextProps.items.visible) {
    value = 1;
  }

  Animated.timing(prevState.itemOpacity, {
    toValue: value,
    duration: 200,
  }).start();

  return {
    // update state
  }
}
票数 1
EN

Stack Overflow用户

发布于 2018-06-01 18:23:13

简单的答案是不要在动画中使用state (感谢dentemm帮助了动画):

代码语言:javascript
复制
itemOpacity = new Animated.Value(0.25);

class TestScreen extends Component {

  getDerivedStateFromProps(nextProps) {
      let value = 0;

      if (nextProps.items.visible) {
        value = 1;
      }

      Animated.timing(itemOpacity, {
        toValue: value,
        duration: 200,
      }).start();

    return null;
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50641678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档