我正在从事Instagram克隆项目。我正在做个人资料页面部分,遇到了一些问题。我正在尝试使用hooks(useState)设置服务器对用户文档的响应。我的问题是,当我使用useEffect时(仅使用[]一次),用户名状态没有设置。我让useEffect无限运行,我发现状态是在一段时间后设置的。
const getUser = async () => {
await axios.get(`/user/getbyusername/${props.match.params.username}`)
.then(res => {
console.log(res.data) // PRINTS DATA CORRECTLY
setProfileUser({
_id: res.data._id,
username: res.data.username,
fullName: res.data.fullName,
followersCount: res.data.followersCount,
followingCount: res.data.followingCount,
profileImage_PublicId: res.data.profileImage_PublicId,
bio: res.data.bio
})
console.log(profileUser)
})
}
// DOES NOT SET ANY DATA
useEffect(() => {
getUser(); // async function and awaits for the server response
// HERE, I call getUserPosts using profileUser._id, and it profileUser._id is not set yet
getPosts(); // async function as well
}, [])
检查setProfileUser(…)是否正确,这是因为它设置了数据,但经过一段时间后,即使我可以在正确的第一时间使用[]来控制台.log(res.data)。
// WORKS, sets the user state after two runs. NOT GOOD PRACTICE
useEffect(() => {
getUser();
})
添加另一个在profile ileUser
更改时运行的use效应
钩子,以便它在setProfileUser
完成后运行:
useEffect(getUser, []);
useEffect(() => {
if (profileUser) {
getPosts();
}
},
[profileUser],
);
问题内容: 我正在尝试新的React Hooks,并有一个带有计数器的Clock组件,该计数器应该每秒增加一次。但是,该值不会增加到超过一。 问题答案: 原因是传递给的闭包中的回调仅访问第一个渲染器中的变量,而无法访问后续渲染器中的新值,因为第二次未调用。 回调中的值始终为0 。 就像您熟悉的状态挂钩一样,状态挂钩有两种形式:一种是处于更新状态的状态,另一种是将当前状态传入的回调形式。您应该使用第
我正在试用新的反应挂钩,并有一个时钟组件,计数器应该每秒钟增加一次。但是,该值不增加超过1。
问题内容: 可以说我有一些状态依赖于其他状态(例如,当A更改时,我希望B更改)。 创建一个观察A并将B设置在useEffect钩内的钩子是否合适? 效果是否会级联,从而在我单击按钮时会触发下一个效果,从而导致b发生变化,从而导致第二个效果在下一次渲染之前触发?这样构造代码是否有性能下降? 问题答案: 效果始终在渲染阶段完成后执行,即使您将setState放在一个效果中,另一个效果也将读取更新后的状
问题内容: 当我用酶测试类组件时,我可以设置状态。当我用钩子测试功能组件时,现在该怎么做? 例如,在我的组件中,我有: 我想在测试中进行更改 问题答案: 使用挂钩状态时,您的测试必须忽略诸如状态之类的实现细节,以便对其进行正确测试。您仍然可以确保组件将正确的状态传递到其子级。 您可以在Kent C. Dodds撰写的这篇博客文章中找到一个很好的例子。 这是摘录的代码示例。 依赖状态执行细节的测试-
我正在尝试使用状态将一个表单输入值复制到另一个表单输入值,但状态没有更新 我创建了一个带有按钮的表单,其中左侧表单输入的值应复制到右侧表单输入。这是我的代码: 无论我做什么,dbSecName的状态都不会改变。我试着设置一个新的常量。我尝试使onclick函数异步并等待。如果我为我试图设置的变量的值添加,我可以正确地看到它,但是dbSecName的console.log总是显示原始值。 我真的不知
我有一个React函数组件,沿着遗留的JQuery应用程序运行。在JQuery元素上调用事件处理程序时,传递当前React状态默认值为初始状态值,而不是更新后的状态值。 已验证的x状态正在通过useEffect钩子更改,但在调用事件侦听器时,x设置为初始状态值,而不是更新后的状态值。 不会显示任何错误消息。在本文的上述代码中,我希望onXSave方法调用中的x状态为true,但它一直显示为fals