React中axios.get获正确response.data,但response.data._id打印undefined
问题分析与解决
你遇到的核心问题是实际的图书数据嵌套在response.data.data层级里,而非直接在response.data顶层。
从你打印的response.data结构可以看出:
{ data: { _id: '6539fb91dee8e9f4440d9bca', title: 'Scarlet', author: 'JamesHowlatt', publishYear: 2000, __v: 0 } }
这里的response.data本身是一个外层对象,它的data属性才是包含_id的图书数据对象。直接访问response.data._id自然会得到undefined——因为外层的response.data并没有_id这个键。
修复代码
调整数据的取值路径即可解决问题:
useEffect(() => { setLoading(true); axios .get(`http://localhost:5555/books/${id}`) .then((response) => { // 取出嵌套在data字段里的实际图书数据 const bookData = response.data.data; setBook(bookData); console.log(bookData); console.log(bookData._id); setLoading(false); }) .catch((error) => { console.log(error); setLoading(false); }); }, [id]);
这类数据嵌套的情况很常见,很多后端框架会默认将业务数据包裹在统一的响应结构中,方便同时返回状态码、提示信息等额外内容,遇到类似问题时,优先检查控制台打印的对象层级结构即可定位问题。
内容的提问来源于stack exchange,提问作者Azizur Rahaman 1063
相关产品推荐
相关产品推荐

