【发布时间】:2019-03-12 08:40:37
【问题描述】:
在 AJAX 请求返回响应后,我想给用户一条反馈消息 5 秒 - 例如“已保存!”。
class FlashMessage extends Component {
state = { visible: false }
updateVisibility = () => {
this.setState({ visible: true }, () =>
this.setTimeout(this.setState({ visible: false }), 5000)
)
}
render() {
this.updateVisibility()
if (this.props.data && this.state.visible) {
return <div>Saved!</div>
}
return false
}
}
export default FlashMessage
以上是我创建一个这样做的组件的徒劳尝试,但显然不起作用,因为你:
在现有状态转换期间无法更新(例如在
render内)。渲染方法应该是 props 和 state 的纯函数。”
所以我的问题是 - 如何在 AJAX 响应后显示一条消息 n 秒。
很遗憾,我不能在这里依赖onClick。
【问题讨论】:
-
你不应该在 setState 中调用 setTimeout,而是在 setState 之后调用它。
-
代码中的 Ajax 调用在哪里?这也是您收到该警告的原因,因为您在渲染中调用了 this.updateVisibility() 函数,而该函数实际上正在执行 setState,这就是警告的原因。我会说你的渲染部分是完全错误的
-
@Think-Twice 提供的代码是父组件将响应对象传递给的子组件。如果您对如何改进代码有任何建议,我将不胜感激。
-
@RonF 但是我怎么才能更新呢?如上所述,
updateVisibility不能在render内运行。
标签: reactjs