【问题标题】:Inertia.JS reload props after post requestInertia.JS 在发布请求后重新加载道具
【发布时间】:2021-05-19 17:18:00
【问题描述】:

我目前很困惑为什么 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,并使用会话数据“成功”转到路由拼写器。 该重定向进入 web.php:

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

这个进入PageLoader控制器,执行“speler”函数。

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

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

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

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

【问题讨论】:

    标签: laravel vue.js vuejs3 inertiajs


    【解决方案1】:

    如果您使用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>
    

    根据您的实现,您需要注意此属性。请参阅 pingCRM 演示应用上的 FlashMessages component 以获取示例实现。

    【讨论】:

    • 谢谢你,正是我想要的!
    猜你喜欢
    • 2019-05-19
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多