reactjs 如何在另一个函数中使用useEffect()中记录的正确更新的值?[duplicate]

nnt7mjpx  于 2022-11-22  发布在  React
关注(0)|答案(1)|浏览(98)

此问题在此处已有答案

The useState set method is not reflecting a change immediately(16个答案)
昨天关门了。
我知道钩子是异步的,所以我需要使用useEffect()钩子沿着依赖数组参数来获取真实的更新的计数器值。
但是,我需要在counter()函数中使用这些值,而不是在useEffect()中。
我可以在useEffect()中正确地看到更新的值,但是我如何在counter()中真实的获取这些更新的值以便使用这些值呢?
我试过(但没有用):在counter(liked, disliked)函数中传递likeddisliked作为参数,但这没有帮助

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>
);
5lhxktic

5lhxktic1#

setter应该这样

setDisliked((disliked) => (disliked+1))

相关问题