NEXTJS 13 应用程序路由器 - 客户端组件中调用的服务器操作失败,未呈现 error.tsx

NEXTJS 13 App router - failed server action invoked in client component not rendering error.tsx

提问人:van der dev 提问时间:10/20/2023 最后编辑:van der dev 更新时间:10/22/2023 访问量:61

问:

使用应用程序路由器,我有一个反应服务器组件 (RSC) 页面。 在该 RSC 中,我有一个名为 MYFORM 的组件(这是一个客户端组件,用于呈现 formik 表单)。

在提交时,我触发了一个服务器操作,通过formik的onSubmit道具发布数据:

  • 如果成功,服务器操作将重定向
  • 如果不成功,服务器操作将引发错误

就像在 RSC 中发生错误一样,我希望将错误对象传递给最近的 error.tsx。

但是,当从客户端组件调用的服务器操作失败时,似乎不会呈现最近的 error.tsx。

为什么?

我看到它可以通过 useTransition 钩子来实现 - 就像这个线程中提到的 https://github.com/vercel/next.js/issues/42525

我尝试做这样的事情,但我不完全确定为什么?

应用/组件/MyForm


"use client"

export default function MyForm(){
        // some stuff here but not relevant to display

    return (
        <Formik
            initialValues={{ email: '' }}
            id="register"
            onSubmit={async (values) => {
                await myServerAction(values);
            }}
        >
            <Field type="email" name="email" placeholder="Email" />
            <button type="submit">Submit</button>
        </Formik>
    );
};

app/page.tsx

export default async function Page(props) {
    // This is serverWorld
        // If someFetch throws an error it will be passed to the nearest  error.js

    const { data } = someFetch(url);

    return (
        <div>
            <SomeCompenent data={data} /> {/* This SomeComponent not relevant */}
            
                        <MyForm />
        </div>
    );
}
reactjs 错误处理 next.js13 react-server-components

评论


答: 暂无答案