【发布时间】:2021-03-17 12:48:46
【问题描述】:
当我使用 localStorage 存储 cart 项目时,然后在控制台框中显示错误:Uncaught SyntaxError: Unexpected token u in JSON at position 0 就像这样,我的输出是空白的,没有什么可显示的,
我试过这样:
import axios from "axios";
import { CART_ADD_ITEM } from "../constants/cartConstants";
export const addToCart = (productId, qty) => async (dispatch, getState) => {
const { data } = await axios.get(`/api/products/${productId}`);
dispatch({
type: CART_ADD_ITEM,
payload: {
name: data.name,
image: data.image,
price: data.price,
countInStock: data.countInStock,
product: data._id,
qty,
},
});
localStorage.setItem("cartItems", JSON.stringify(getState().cart.cartItems));
};
在cartAction.js 文件中,我使用了localStorage.setItem("cartItems", JSON.stringify(getState().cart.cartItems)); 行。
然后store.js文件:
import { applyMiddleware, combineReducers, compose, createStore } from "redux";
import thunk from "redux-thunk";
import { cartReducer } from "./reducer/cartReducer";
import {
productDetailsReducer,
productListReducer,
} from "./reducer/productReducer";
const initialState = {
cart: {
cartItems: localStorage.getItem("cartItems")
? JSON.parse(localStorage.getItem("cartItems"))
: [],
},
};
const reducer = combineReducers({
productList: productListReducer,
productDetails: productDetailsReducer,
cart: cartReducer,
});
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
reducer,
initialState,
composeEnhancer(applyMiddleware(thunk))
);
export default store;
如果我不使用这个逻辑
cart: {
cartItems: localStorage.getItem("cartItems")
? JSON.parse(localStorage.getItem("cartItems"))
: [],
},
在initialState 内部则不会显示任何错误,但是当我使用它时会显示错误。
请给点建议。
【问题讨论】:
-
你要做的第一件事就是检查你传递给
JSON.parse()的字符串。 -
即“未定义”中的“u”。您错误地假设调度将同步设置状态。如果你
setItem在减速器而不是动作中,你将能够正确设置 localStorage。 -
您是否查看了引用相同错误的any of the 288 other questions?
标签: javascript json reactjs redux