laravel - Inertia.JS 在发布请求后重新加载 Prop

我目前很困惑为什么 Inertia.js 没有重新加载或重新呈现我的页面。

我有一个可以填写的表格,一旦提交就会执行:

Inertia.post("/ban", ban);

这将重定向到我的 Laravel 的 web.php 中的一个 POST。 看起来像这样:

Route::post("/ban", [Speler::class, "ban"]);

这将重定向到一个名为“Speler”的类,其中有一个名为“ban”的函数。 完成一些 SQL 语句后,它将执行此返回:

return Redirect::route("speler", [$steam])->with("success", "Ban doorgevoerd!");

这将返回到 web.php,并使用 session 数据“成功”转到路由 speler。 该重定向进入 web.php:

Route::get("/speler/{steam}", [PageLoader::class, "speler"])->name("speler");

这个转到 PageLoader Controller ,并执行“speler”函数。

但这里变得很奇怪,这将返回一个 Inertia::render 与该人所在的同一页面,但需要添加另一个 Prop ,或更改 Prop 。 (这样我就可以显示一个带有成功文本的弹出窗口)

return Inertia::render("Panel/Speler",
                ["steamNaam" => $steamNaam, "discord" => $discord, "karakterAantal" => $karakterAantal, "karakters" => $karakters, "sancties" => $sanctiesReturn, "punten" => $aantalPunten, "steamid" => $steamid, "success" => $melding]
            );

“成功”属性包含 $melding,它只包含一个字符串。

但由于某种原因,它似乎没有重新呈现页面,表单保持填充状态, Prop 是相同的。 有人有解决方案吗?

最佳答案

如果您使用 form helper 设置表单,您可以像这样在成功的帖子上重置表单:

form.post('/ban', {
  preserveScroll: true,
  onSuccess: () => form.reset(), // reset form if everything went OK
})

你设置的成功信息

return Redirect::route("speler", [$steam])->with("success", "Ban doorgevoerd!");

通常由 Inertia 中间件处理并作为“共享数据”提供。参见 this docs page关于如何配置。共享数据呈现在 $page.props 变量中。在那里您可以找到 Ban doorgevoerd! 消息。您可以按如下方式向用户显示这些内容:

<div v-if="$page.props.flash.message" class="alert">
    {{ $page.props.flash.message }}
</div>

根据您的实现,您可能需要监视此属性。查看FlashMessages component在 pingCRM 演示应用程序上进行示例实现。

https://stackoverflow.com/questions/67607969/

相关文章:

java - 如何使用 Arrays.asList() 启动 LinkedList

java - 如何断言数组中某个值的存在

Pandas - 提取第 4 个字符后的所有文本

python - 无需替换即可生成置换数组

python - 如何在 python 中分组和计算二项式变量?并绘制这个图

python - 在新列中计算数据框中的逗号分隔字符串

kubernetes - Helm : How to avoid recreating secret

java - 如何使用 Java 9+ 从 JDK 模块获取类的文件?

c++ - 为什么 C++ 中 std::string 的复制方法在此程序中显示出奇怪的行为?

c# - 在不使用 lambda 表达式的情况下从该方法传递额外参数时在方法内部订阅事件