我想创建一个类似于模态的组件,它接收一个打开/关闭的布尔值作为道具,然后将该值存储在组件状态中。当关闭模态时,我想要更新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更好的解决方案。
您可以使用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? 问题答案: