Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我所在的州会被推翻?反应_Javascript_Reactjs_State - Fatal编程技术网

Javascript 为什么我所在的州会被推翻?反应

Javascript 为什么我所在的州会被推翻?反应,javascript,reactjs,state,Javascript,Reactjs,State,我正在使用useState钩子来管理状态。每当用户单击likePost时,都会使用newData调用setData。这会导致状态更新,如图像中所示,并且项将丢失postedBy名称item.postedBy.name将变得未定义。这会导致用户标题div为空并折叠 有关守则包括: const Home = () => { const [data, setData] = useState([]); // for access to user who's logged in, use con

我正在使用useState钩子来管理状态。每当用户单击likePost时,都会使用newData调用setData。这会导致状态更新,如图像中所示,并且项将丢失postedBy名称item.postedBy.name将变得未定义。这会导致用户标题div为空并折叠

有关守则包括:

const Home = () => {
const [data, setData] = useState([]);
// for access to user who's logged in, use context
const {state, dispatch} = useContext(UserContext);
useEffect(()=>{
    fetch('/allposts', {
        headers:{
            "Authorization":"Bearer " + localStorage.getItem("jwt")
        }
    }).then(res=>res.json())
    .then(result=>{
        console.log(result);
        setData(result.posts);
    });     
}, []);

const likePost = (item, id) => {
    fetch('/like', {
        method: "put", 
        headers: {
            "Content-Type":"application/json",
            "Authorization":"Bearer " + localStorage.getItem("jwt")
        },
        body: JSON.stringify({
            postId:id
        })
    }).then(res=>res.json())
    .then(result=>{
        const newData = data.map(item=>{
            if(item._id == result._id){
                return result;
            }else{
                return item;
            }
        })
        setData(newData);
    }).catch(err=>{
        console.log(err);
    })
};

返回(
{
postsReversed.map(项=>{
返回(
{item.postedBy.name}{item.postedBy.\u id==state.\u id
&&deletePost(项目编号)}
>删除
}
{item.likes.includes(state.\u id)
?
{unlikePost(项目编号)}
>拇指朝下
: 
{likePost(item.\u id)}
>竖起大拇指
}

这似乎按预期工作,您正在使用从
/like
端点得到的响应来替换
/data
数组中的项目。您可以更改服务器以返回与
/allposts
相同的项目数据结构,也可以使用以下方法:

....
if (item._id == result._id) {
    return { ...item, likes: result.likes };
}
....
仅更新项目的一部分

....
if (item._id == result._id) {
    return { ...item, likes: result.likes };
}
....