我目前正致力于在重定向页面上显示成功/失败消息。如何在反应路由器历史记录中创建一个易失性状态?
的工作流程是这样的,
用户类型的东西在pageA的,并提交。然后做history.push到下一页。
history.push(/pageB/path, {message: 'Success!'});
并在页面B,它会显示在顶部成功的消息。
但是,此成功消息将永远存在,然后如果用户按照前面的步骤再次转到pageA,则会使用户感到困惑。然后返回到pageB(可能是浏览器上的后退按钮或表单上的取消按钮)而无需提交。此消息仍将显示在页面顶部。
我的目标是在用户提交表单后才显示消息。所以我的问题是有没有办法让历史状态变得不稳定,所以当用户刚回到pageB时消息不会显示出来。
任何建议是值得欢迎的。谢谢!
编辑:我目前的解决方案是检查历史记录的操作(弹出或推送),并只显示操作推送时的消息。但寻找更好的解决方案。
编辑:为了更清楚我的问题。这里是用户操作和浏览器历史记录。
操作:pageA中的用户并提交表单。
历史:
0:pageA的
动作:用户已经被重定向到页面B(与成功消息)
历史:
0:pageA的
1: pageB with history.location.state.message = ...
操作:用户去pageA的无需再次提交表单
历史:
0:pageA的
1:页面B与history.location.state.message = ...
2 :pageA的
操作:用户返回页面B通过浏览器
历史的后退按钮:
0:pageA
1:pageB with history.location.state.message = ...
在步骤4,它可以追溯到古老的历史1已经消息状态设定所以它会仍然存在(但不得,因为用户没有提交表单)。
编辑:我想如果有可能直接修改历史记录以从页面中删除状态?
您的意思是,虽然用户在pageB上一段时间,你想删除mesage''' successs'''吗?或者你的问题是,当用户在pageB中结束时,即使他们在表单提交后不会去那里,总会有成功消息? –
@MatthewBarbara接近你的第二个。期望行为是1.用户在pageA中提交表单并重定向到pageB 2.在pageB顶部显示成功/失败消息。 3.用户再次转到pageA,但不要提交表单并通过后退按钮返回到pageB。 PageB不应该显示任何消息,因为用户没有做任何事情。但是,在步骤4中,由于消息由历史记录记录,因此消息仍然存在。 – waitingduck