当前位置: 首页 > 知识库问答 >
问题:

如何使用React的getDerivedStateFromProps和SetTimeout?

别俊誉
2023-03-14

我想创建一个类似于模态的组件,它接收一个打开/关闭的布尔值作为道具,然后将该值存储在组件状态中。当关闭模态时,我想要更新close boolean prop,但在更新组件状态之前等待几秒钟,以便我可以添加过渡类和动画退出。

使用ComponentWillReceiveProps,我可以通过在超时中包装this.SetState并同时添加类来实现这一点。对于新的React 16.3 API,我发现建议使用GetDerivedStateFromProps

static getDerivedStateFromProps(nextProps, prevState) {
    if (nextProps.menuIsOpen === false && prevState.menuIsOpen === true) {
        return setTimeout(() => { menuIsOpen: false}, 1000);
    }
    return null;
}

但那不起作用。我读到settimeout不返回值,但我想知道是否有比返回promise更好的解决方案。

共有1个答案

慕才
2023-03-14

您可以使用componentdidupdate:

componentDidUpdate(prevProps){
    // update your class names...
    if (!this.props.menuIsOpen && this.state.menuIsOpen) {
        setTimeout(() => this.setState({ menuIsOpen: false}), 1000);
    }
}
 类似资料:
  • 当类组件的输入道具相同时,可以使用PureComponent或ShouldComponentUpdate来避免呈现。现在,您可以通过将函数组件包装在react.memo中来对它们进行同样的处理。 所期望的: 我希望只有当模态可见时才呈现模态(由this.props.show管理) 对于类组件: 如何在功能组件中使用?在modal.jsx中? 相关代码: 功能组件modal.jsx(我不知道如何检查

  • 我还有一个受控元素--一个HTML文本输入元素,它与相同的状态变量相关联。 问题是,当我通过受控元素更改状态变量时,getDerivedStateFromProps()将执行并将值设置回前面收到的prop。 作为一个React新手,我不明白为什么会发生这种情况。上面的动作应该只在收到一个新的道具值时发生,就像名字“下一个道具”所建议的那样。 使用道具设置初始状态 让我的受控元素(html输入标记)

  • 问题内容: 看起来它将在即将发布的版本中完全淘汰,取而代之的是新的生命周期方法:static getDerivedStateFromProps() 。 经检查,它看起来像你现在无法作出直接比较和,就像你可以在。有没有办法解决? 而且,它现在返回一个对象。我是否正确假设返回值本质上是? 以下是我在网上找到的示例:状态源自props / state 。 之前 后 问题答案: 有关删除的:你应该能够与组

  • getderivedstatefromprops 和 componentdidupdate这两个的应用场合分别是哪些呢

  • 问题内容: 我使用的是react-router,因此我将组件用于整个应用程序中的链接,在某些情况下,我需要根据用户输入动态生成链接,因此需要类似的内容 ,但无需刷新页面。 我发现了这个小笔记-(https://github.com/rackt/react- router/issues/835 )-我尝试使用,但是上下文有问题… 这导致我(https://github.com/rackt/react

  • 问题内容: 我从formik库开始进行反应,但是我无法弄清道具handleChange和handleBlur的用法。 根据docs的说法,handleBlur可以设置为a上的prop ,然后必须手动向下传递到。 我已经尝试过了,但是没有成功:(为了更加清晰,我保留了关于handleBlur的代码) 这种方法有什么问题?实际上应该如何使用handleBlur和handleChange? 问题答案: