reactjs - 提交我的 React 表单后,是否有更简单的方法将对象传递到我要重定向到的页面?
问题描述
我正在使用 React 16.13.0。我有以下处理程序用于将我的 React 表单提交到其端点...
const handleFormSubmit = (e) => {
...
fetch(REACT_APP_PROXY + "/coops/", {
method: "POST",
body: JSON.stringify(NC),
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
})
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw response;
}
})
.then((data) => {
const result = data;
window.location.href = "/" + result.id + "/people";
}).catch(err => {
err.text().then( errorMessage => {
setErrors({ errors: errorMessage });
});
});
};
我想知道是否有更“反应”的方式来重定向到下一页。现在,我在做
window.location.href = "/" + result.id + "/people";
这似乎有点hacky。此外,我无法将对象传递到下一页,我在执行提交的页面上拥有该对象(“数据”对象是理想情况下我想要传递到下一页的对象)。因此,当重定向页面加载时,我被迫执行另一个 fetch 调用以再次检索该对象。
解决方案
反应,在页面加载/位置更改之间传递对象:
- 您可以按照此处接受的答案中的说明使用
localStorage
/ 。sessionStorage
- 或者您使用React Context或 Redux 将对象存储在跨应用程序共享的全局状态中
反应、路由和传递对象:
首先,更新没有错window.location
。这是更新当前页面的有效方法。保持原样并使用sessionStorage
传递您的对象很可能是解决问题的最快方法。话虽如此,我还是有更优化的解决方案,感觉更像是反应:例如尝试反应路由器。它还允许您通过将对象作为道具向下传递到其他页面来在路由之间传递对象。
react-router-dom 钩子示例:
import { useHistory } from "react-router-dom";
const myComponent = () => {
const history = useHistory();
...
.then((data) => {
const result = data;
// access state via this.props.location.state.result
history.push({
pathname: "/" + result.id + "/people",
state: {result}
});
}).catch(err => {
err.text().then( errorMessage => {
setErrors({ errors: errorMessage });
});
});
}
在此处查找有关 react-router-dom 的更多信息。
推荐阅读
- mysql - 使用 python mysql.connector 模块在 MySql 中索引占位符
- selenium - 如何从 Robot Framework 的输入字段中获取文本?
- powerbi - 在 power bi 中设置切片器的默认值
- flutter - Flutter 自定义 TabBar 指示器
- android - Android Camera2 预览被拉伸
- javascript - VueJs +ElementUi Change 方法没有事件数据
- r - for 循环和 if 语句给出错误的参数
- spring - 使用 spring-boot 的 REST API 和使用 3rd 方 REST API 的自定义身份验证
- powershell - 通过 PowerShell 将所有已安装的软件分组到一个单元中
- list - Excel 2007:如何从列表中提取所有可能的 2 对组合并将它们显示在 2 个单独的列中