我现在很困惑为什么Inertia.js没有重新加载或重新渲染我的页面。
我有一个可以填写的表格,一旦提交就会执行:
Inertia.post("/ban", ban);
这将重定向到我的Laravel的web.php中的POST。看起来是这样的:
Route::post("/ban", [Speler::class, "ban"]);
这重定向到一个名为"的类;Speler";,其中有一个函数称为";"禁令";。一旦完成一些SQL语句,它将执行以下返回:
return Redirect::route("speler", [$steam])->with("success", "Ban doorgevoerd!");
这将返回到web.php,并转到带有会话数据"的路由speler;成功";。该重定向进入web.hp:
Route::get("/speler/{steam}", [PageLoader::class, "speler"])->name("speler");
这一个进入PageLoader控制器;speler";作用
但在这里,它变得很奇怪,这将返回一个Inertia::呈现该人所在的同一页面,但需要添加另一个道具,或更改道具(这样我就可以显示一个弹出窗口,其中包含成功的文本(
return Inertia::render("Panel/Speler",
["steamNaam" => $steamNaam, "discord" => $discord, "karakterAantal" => $karakterAantal, "karakters" => $karakters, "sancties" => $sanctiesReturn, "punten" => $aantalPunten, "steamid" => $steamid, "success" => $melding]
);
";成功;prop包含$melding,它只包含一个字符串。
但由于某种原因,它似乎没有重新呈现页面,表单保持填充状态,道具也是一样的。有人有解决方案吗?
如果您使用表单助手设置表单,您可以在成功发布时重置表单,如下所示:
form.post('/ban', {
preserveScroll: true,
onSuccess: () => form.reset(), // reset form if everything went OK
})
成功消息,您用设置
return Redirect::route("speler", [$steam])->with("success", "Ban doorgevoerd!");
通常由Inertia中间件负责,并作为"共享数据"提供。请参阅此文档页面了解如何配置。共享数据在$page.props
变量中呈现。在那里可以找到Ban doorgevoerd!
消息。您可以向用户显示以下内容:
<div v-if="$page.props.flash.message" class="alert">
{{ $page.props.flash.message }}
</div>
根据您的实现,您需要监视此属性。有关示例实现,请参阅pingCRM演示应用程序上的FlashMessages
组件。