关键在于理解:即使在SPA应用中,React Router v7的表单提交也会发送真实的HTTP请求到服务器,而不只是客户端状态更新。这与传统的React应用有很大不同:传统做法是在客户端处理表单并通过API调用更新数据。React Router v7使表单提交直接映射到服务器端的action处理函数。 看一下内部可能的简化实现:
// React Router的Form组件内部简化实现
function Form({ action, method, children }) {
const handleSubmit = async (event) => {
event.preventDefault();
const formData = new FormData(event.target);
// 创建真实的HTTP请求到服务器
const response = await fetch(action, {
method: method || "post",
body: formData
});
const result = await response.json();
// 处理响应结果...
};
return (
<form onSubmit={handleSubmit} action={action} method={method}>
{children}
</form>
);
}
服务器端处理:
/ 服务器端路由处理简化示例
server.post('/some-route', async (req, res) => {
// 找到匹配路由的action函数
const routeModule = findRouteModule(req.path);
// 在服务器环境中执行action函数
const result = await routeModule.action({
request: req,
params: extractParams(req.path)
});
// 返回结果
res.json(result);
});