重定向路线并显示消息

2023-12-24

我想知道是否有办法重定向路线或返回Response与数据并在另一个页面上获取它loader功能。

基本上,我试图使用表单创建一个新对象,并重定向到另一个我想要显示创建成功消息的页面。

这是一个表单页面示例:

我正在尝试发送消息Response body.

import { ActionFunction, Form } from "remix";

export const action: ActionFunction = async ({ request }) => {
  // const formData = await request.formData();

  return new Response(JSON.stringify({ message: "Hello world!" }), {
    status: 303,
    headers: {
      Location: "/new-page",
    },
  });
};

export default function Index() {
  return (
    <div>
      <Form method="post">
        <input type="text" id="name" name="name" />
        <button type="submit">Submit</button>
      </Form>
    </div>
  );
}

并且在NewPage我需要知道是否有办法获取重定向响应上的消息。

import { ActionFunction } from "remix";

export const action: ActionFunction = async ({ request }) => {
  const formData = await request.formData();

  // Get message here

  return {
    message: "",
  };
};

export default function NewPage() {
  return <div>New Page</div>;
}

这是会话 Flash 消息的一个很好的用例 ????

https://remix.run/docs/en/v1/api/remix#sessionflashkey-value https://remix.run/docs/en/v1/api/remix#sessionflashkey-value

该文档提供了一个很好的示例,但其背后的想法是:

  • 在 Index 的操作中获取表单数据
  • 将字符串化数据存储在会话 cookie flash 消息中
  • 使用重定向功能返回响应(从 r​​emix 导入的帮助程序,为您创建响应重定向)
  • 在NewPage的加载器中,读取会话cookie消息并返回它。不要忘记提交您的会话,它会为您删除此闪存消息
  • 在组件中使用 useLoaderData 挂钩来获取加载器的返回数据
//sessions.server.ts
import { createCookieSessionStorage } from "remix";

// https://remix.run/docs/en/v1/api/remix#createcookiesessionstorage
const { getSession, commitSession, destroySession } =
  createCookieSessionStorage({
    cookie: {
      name: "__session",
      secrets: ["r3m1xr0ck5"], // should be a process.env.MY_SECRET
      sameSite: "lax",
    },
  });
import { ActionFunction, Form } from "remix";
import { getSession, commitSession } from "./sessions";

export const action: ActionFunction = async ({ request }) => {
  // const formData = await request.formData();
  // Get session
  const session = await getSession(
    request.headers.get("Cookie")
  );

  session.flash("myMessageKey", "Hello world!");

  return redirect("/new-page", {
    headers: {
      "Set-Cookie": await commitSession(session),
    },
  });
};

export default function Index() {
  return (
    <div>
      <Form method="post">
        <input type="text" id="name" name="name" />
        <button type="submit">Submit</button>
      </Form>
    </div>
  );
}
import { LoaderFunction } from "remix";
import { getSession, commitSession } from "./sessions";

export const loader: LoaderFunction = async ({ request }) => {
  const formData = await request.formData();

  // Get message here
  const session = await getSession(
    request.headers.get("Cookie")
  );
  const message = session.get("myMessageKey") || null;

  return json(
    { message },
    {
      headers: {
        "Set-Cookie": await commitSession(session), //will remove the flash message for you
        // "Set-Cookie": await commitSession(session, { maxAge: SESSION_MAX_AGE }), //re set max age if you previously set a max age for your sessions.
      },
    }
  );
};

export default function NewPage() {
  const { message } = useLoaderData();
  return <div>New Page {message}</div>;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重定向路线并显示消息 的相关文章

  • 为什么Datareader无法初始化?

    我们在类名之前使用abstract关键字来限制创建类的实例 但 datareader 不是一个抽象类 但我们无法创建它的实例 你能解释一下为什么吗 我搜索了它 然后发现它没有构造函数 这就是为什么我们无法创建对象 但据我所知 如果没有构造函
  • ActiveX初始化:AxHost.State对象

    我正在尝试使用 WinFormsHost Control 将 Unity3D ActiveX 控件嵌入到 WPF Form 中 实际上 在VS的属性窗口中设置路径时效果很好 但在我的代码文件中设置时它不会加载任何内容 这是控件的一个已知问题
  • VSCode 中的 .ejs 格式

    这是我的问题 它不可读 为了使 ejs 正常工作 我到目前为止添加了以下内容 我还有保存格式和更漂亮的格式 我正在寻找更好的格式的建议 以便我可以阅读它 files associations ejs html css postcss emm
  • 如何将 PreMake/CMake 集成到 C++ 构建工作流程中

    我目前正在研究 PreMake CMake 但是 我不明白如何在整个跨平台构建工作流程中使用它 事实上 它生成 makefile 或解决方案 那么 如何在每个目标平台上实际构建这些解决方案 您是否必须为每个目标维护一个构建脚本 例如 sh
  • 如何检查当前日期是否在java中两个重复出现的日期之间? [复制]

    这个问题在这里已经有答案了 我正在尝试创建一个应用程序 但在计算今天是否在学年中陷入困境 用户输入两个日期 没有年份 每年都会重复发生 这些是学年的开始和结束日期 我想检查当前日期是否在这两个日期之间 即使它重叠两年 因此 如果学校从 11
  • 推送通知到达时应用程序徽章图标未更新

    我看过关于的问题在午夜更新应用程序徽章 并提供以下选项 应用程序未启动或在后台 徽章数量可能会减少 https stackoverflow com questions 4846787 updating application badge a
  • 用户登录后访问登录页面如何重定向到首页?

    这是我的春季安全配置
  • 将事件函数绑定到类,但使用removeEventListener并删除引用,从而使垃圾收集器能够正常工作

    众所周知 当我们在 JavaScript 中创建类时 普通函数会返回类对象 但事件会返回事件对象 并且类对象会丢失 function class a this name a document addEventListener click t
  • 如何在 bash 中编写看门狗守护进程?

    我想要一种在 shell 脚本中编写守护进程的方法 该守护进程循环运行另一个应用程序 如果它死了则重新启动它 运行时使用 myscript sh从 SSH 会话中 它将启动守护程序的新实例 除非守护程序已在运行 当 SSH 会话结束时 守护
  • Shared_ptr 的隐式转换

    我有 U 类和 T 类的两个共享指针 其中 T 是 U 的基数 进行隐式转换是没有问题的shared ptr u to shared ptr u
  • 如何在 Jetpack Compose 中从 URL 加载图像? [复制]

    这个问题在这里已经有答案了 嗯 我正在研究 Compose UI 而且我只专注于基本的事情 其中之一是使用 Glide 显示来自 URL 的图像 我已尝试以下代码 但未调用委托 onResourceReady 和 onLoadCleared
  • 访问 servlet 实例

    虽然我真的无法想到这种情况的实际用例 但我纯粹希望这是一个好奇心驱动的问题 我知道 servlet 容器保存着 servlet 创建的所有实例 并将请求线程委托给这些实例 对这些实例进行管理也是有意义的 以避免在容器权限之外进行无根据的调用

随机推荐