此问题在此处已有答案:
The useState set method is not reflecting a change immediately(16个答案)
昨天关门了。
我知道钩子是异步的,所以我需要使用useEffect()
钩子沿着依赖数组参数来获取真实的更新的计数器值。
但是,我需要在counter()
函数中使用这些值,而不是在useEffect()
中。
我可以在useEffect()
中正确地看到更新的值,但是我如何在counter()
中真实的获取这些更新的值以便使用这些值呢?
我试过(但没有用):在counter(liked, disliked)
函数中传递liked
和disliked
作为参数,但这没有帮助
const [liked, setLiked] = useState(0);
const [disliked, setDisliked] = useState(0);
useEffect(() => {
// Correct values are being logged
console.log("liked", liked);
console.log("disliked", disliked);
}, [liked, disliked]);
const counter = () => {
if(someCondition.........) {
setDisliked(disliked + 1);
handleLike();
} else {
setLiked(liked + 1);
handleDislike();
}
};
const handleLike = () => {
const url = 'http://127.0.0.1:8000/api/like';
const headers = {
"Accept": 'application/json'
};
let data = {
'liked' : liked // value updates on second click only
};
console.log(data);
axios.post(url, data, {headers})
.then(resp => {
console.log(resp.data);
}).catch(err => {
console.log(err);
});
};
const handleDislike = () => {
const url = 'http://127.0.0.1:8000/api/dislike';
const headers = {
"Accept": 'application/json'
};
let data = {
'disliked' : disliked // value updates on second click only
};
console.log(data);
axios.post(url, data, {headers})
.then(resp => {
console.log(resp.data);
}).catch(err => {
console.log(err);
});
};
return(
<button onClick={counter}>Click Here</button>
);
1条答案
按热度按时间5lhxktic1#
setter应该这样