Laravel 10 + Inertia.js v1中Flash消息无法显示的问题求助
问题解决:Laravel + Inertia.js Flash消息无法正常显示
解决方案
1. 修复前端响应式问题
直接读取page.props.flash.success会丢失响应式,导致Inertia跳转后props更新时变量无法同步。需要用Vue的computed包裹该值:
修改布局组件的<script setup>部分:
<script setup> import { Link, usePage } from '@inertiajs/vue3' import { computed } from 'vue' const page = usePage() // 转换为响应式计算属性 const flashSuccess = computed(() => page.props.flash.success) </script>
2. 优化后端Flash消息获取(可选)
使用session()->pull('success')替代get(),确保消息被读取后立即从session中移除,避免重复显示:
修改HandleInertiaRequests的share方法:
public function share(Request $request): array { return array_merge(parent::share($request), [ 'flash' => [ 'success' => $request->session()->pull('success') ] ]); }
问题原因
- 前端:普通变量无法响应
page.props的更新,只有计算属性能实时监听Inertia跳转后的props变化,更新Flash消息状态。 - 后端:
get()方法仅读取session中的Flash消息但不清除,可能导致消息在后续请求中重复出现;pull()则会在读取后自动移除消息,符合Flash消息"一次性显示"的设计。
完成修改后,创建Listing并跳转,Flash消息即可正常显示,无需依赖热重载刷新页面。
内容的提问来源于stack exchange,提问作者Debasish Das
相关产品推荐
相关产品推荐

