我创建了一个功能,使用户能够添加朋友,但只要我按下添加朋友按钮,我得到一个错误,如图所示:
一旦我在定义friends数组的行下添加了这段代码(在下面的代码中标记为Error)错误来自friends.find它不是friends.map的函数它不是friendsList.jsx组件中的函数
Friends.jsx组件代码:
import { PersonAddOutlined, PersonRemoveOutlined } from "@mui/icons-material";
import {
Box,
Divider,
IconButton,
Typography,
useTheme
} from "@mui/material";
import { useDispatch, useSelector } from "react-redux";
import { setFriends } from "state";
import FlexBetween from "./FlexBetween";
import UserImage from "./UserImage";
import { useNavigate } from "react-router-dom";
const Friend = ({ friendId, name, subtitle, userPicturePath }) => {
const dispatch = useDispatch();
const navigate = useNavigate();
const { _id } = useSelector((state) => state.user);
const token = useSelector((state) => state.token);
const friends = useSelector((state) => state.user.friends);
// if (!Array.isArray(friends)) { |
// return console.log(friends); |<=== Error
// } |
// eslint-disable-next-line react-hooks/rules-of-hooks
const { palette } = useTheme();
const primaryLight = palette.primary.light;
const primaryDark = palette.primary.dark;
const main = palette.neutral.main;
const medium = palette.neutral.medium;
const isFriend = friends.find((friend) => friend._id === friendId);
const patchFriend = async() => {
const response = await fetch(
`http://localhost:3001/users/${_id}/${friendId}`,
{
method: "PATCH",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
}
);
const data = await response.json();
dispatch(setFriends({ friends: data }));
// console.log("array123: ",Array.isArray(friends))
// console.log("array123: ")
};
return (
<FlexBetween>
<FlexBetween gap="1rem">
<UserImage image={userPicturePath} size="55px" />
<Box
onClick={() => {
navigate(`/profile/${friendId}`);
navigate(0);
}}
>
<Typography
color={main}
variant="h5"
fontWeight="500"
sx={{
"&:hover": {
color: palette.primary.light,
cursor: "pointer"
}
}}
>
{name}
</Typography>
<Typography color={medium} fontSize="0.75rem">
{subtitle}
</Typography>
</Box>
</FlexBetween>
<IconButton
onClick={() => patchFriend()}
sx={{ backgroundColor: primaryLight, p: "0.6rem" }}
>
{isFriend ? (
<PersonRemoveOutlined sx={{ color: primaryDark }} />
) : (
<PersonAddOutlined sx={{ color: primaryDark }} />
)}
</IconButton>
</FlexBetween>
)
};
export default Friend;
state.js
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
mode: "light",
user: null,
token: null,
posts: [],
};
export const authSlice = createSlice({
name: "auth",
initialState,
reducers: {
setLogin: (state, action) => {
state.user = action.payload.user;
state.token = action.payload.token;
},
setLogout: (state) => {
state.user = null;
state.token = null;
},
setFriends: (state, action) => {
if (state.user) {
state.user.friends = action.payload.friends;
} else {
console.error("user friends is not exist")
}
},
setPosts: (state, action) => {
state.posts = action.payload.posts;
},
setPost: (state, action) => {
const updatedPosts = state.posts.map((post) => {
if (post._id === action.payload.post._id) return action.payload.post;
return post;
});
state.posts = updatedPosts;
},
},
});
export const { setLogin, setLogout, setFriends, setPosts, setPost } = authSlice.actions;
export default authSlice.reducer;
任何帮助是赞赏和感谢提前
1条答案
按热度按时间ykejflvf1#
下面是一种方法来展示我们如何得到
.find is not a function
错误。确保
friends
是数组。console.log来检查。它不应该是数组以外的任何东西(str,boolean,number等)。