我在使用useEffect和useState获取数据并将其设置为功能组件中的状态时遇到问题。
我的问题是,我想保持与axios async/wait在一个单独的文件中完成数据获取,以提高应用程序的可伸缩性,但我不明白如何更新状态,以防promise被解决(而不是拒绝)。
特别是,我试图从promise中检索一个名为data In state的表行数组,但我不知道如何在state中设置响应的结果
下面是组件文件中的代码:
const [data, setData] = React.useState([]);
useEffect(() => {
const { id } = props.match.params;
props.getTableRows(id).then((res) => {
setData(res);
});
//or is it better:
//props.getTableRows(id).then(setData); ?
}, []);
还有我的行动。js:
export const getTableRows = (id, history) => async (dispatch) => {
try {
const res = await axios.get(`/api/test/${id}`);
dispatch({
type: GET_TEST,
payload: res.data.rows,
});
} catch (error) {
history.push("/test");
}
};
不幸的是,这段代码不起作用,错误:Uncaught(在promise中)TypeError:无法读取未定义的属性“forEach”
我发现了另一个解决方案,它是在use效应方法中定义promise,如下所示:
useEffect(() => {
const { id } = props.match.params;
const fetchData = async () => {
const result = await axios.get(`/api/test/${id}`);
setData(result.data.rows);
};
fetchData();
}, []);
这段代码在我的应用程序中起作用,但正如我所说的,我不喜欢在组件文件中有promise,我想让它们全部付诸实施。js用于应用程序可伸缩性(在url更改的情况下,我不必更改所有文件),但在这种情况下,我不知道将setData(result.data.rows)放在哪里;在最后一个例子中,哪一个似乎是正确的选择
有什么建议吗?谢谢
我没有看到您从getTableRow返回任何内容。您只是分派了结果,但没有返回函数调用的res。如果您提供错误跟踪,这将是有帮助的。
您仍然需要使用async/await。这个然后()在返回值时执行,但是您的函数将继续呈现,并且不会等待它。(通过尝试在空状态下访问forEach导致错误)。在它通过错误的promise之后。然后()将更新这些值,这就是为什么您可以在控制台中看到它们。
useEffect(() => {
async function getData() {
const { id } = props.match.params;
await props.getTableRows(id).then((res) => {
setData(res);
});
}
getData()
}, []);
此外,在访问状态之前,可以检查空值(通常是良好的做法)。
if (this.state.somestate != null) {
//Run code using this.state.somestate
}
本文向大家介绍在React.js功能组件中使用useEffect(),包括了在React.js功能组件中使用useEffect()的使用技巧和注意事项,需要的朋友参考一下 React钩子useEffect有助于在React的功能组件中添加componentDidUpdate和componentDidMount组合生命周期。 到目前为止,我们知道我们只能在有状态组件中添加生命周期方法。 要使用它,我
我不熟悉React钩子和React 16.13.1。 我将实现能够处理登录的Auth组件。 但是它似乎没有正确更新状态,即使使用响应对象调用。 这个代码有什么问题?
有人能解释一下我做错了什么吗?我有一个react功能组件,在其中我使用useEffect钩子从服务器获取一些数据,并将这些数据放入状态值。在获取数据之后,在同一个useHook中,我需要使用该状态值,但由于某些原因,该值是明确的。看看我的示例,console有一个空字符串,但在浏览器上我可以看到该值。 链接到codesandbox。
我正在学习使用react钩子来管理状态,但我得到了一个错误,即第5:3行:react钩子“useffect”在函数“campot”中被调用,该函数既不是react函数组件,也不是自定义react钩子函数react钩子/钩子规则 这是我的密码
问题内容: 我正在尝试使用opencv v 2.1创建图像,但出现此错误: AttributeError:“模块”对象没有属性“ CreateImage” 该代码是 问题答案: 您正在覆盖名称空间。仅使用,而不使用其他。
下面是一个函数,它获取一个长字符串,并返回一个按段落分割的字符串。 问题是k是空的。为什么函数不起作用?