react redux useSelector()总是返回一个承诺

e0bqpujr  于 2023-02-13  发布在  React
关注(0)|答案(2)|浏览(105)

我正在使用react redux将购物车功能添加到我的应用中。我使用将数据存储在本地存储中

store.subscribe(() => saveToLocalStorage(store.getState()));

const saveToLocalStorage = async (state: any) => {
    try {
        const serialisedState = JSON.stringify(state);
        await Storage.setItem("cartState", serialisedState);
    } catch (e) {
        console.warn(e);
    }
}

从本地加载数据使用

const store = createStore(cartItems, loadFromLocalStorage());

const loadFromLocalStorage = async () => {
    try {
        let data = await Storage.getItem('cartState');
        data = data != null ? data : JSON.stringify(initialState)
        return JSON.parse(data)
    } catch (error) {
        console.log('Error Storging data', error);

    }
}

当我尝试使用useSelector()钩子获取数据时,我总是得到一个承诺,并且不能从那里获取数据

const state = useSelector( state  => { return state });

如何从promise中获取数据或从loadFromLocalStorage()函数中返回实际数据?

xpszyzbs

xpszyzbs1#

我用这个解决了问题
我在Reducers文件夹中创建了index.tsx文件,下面是代码

import { combineReducers } from "redux";
import cartItems  from "./cartItems";

const rootReducers = combineReducers({ cartItems: cartItems });

export default rootReducers;

并在createStore()方法中使用rootReducers,如下所示

const store = createStore(rootReducers, loadFromLocalStorage());

我也不知道为什么,但我不得不改变这个箭头函数loadFromLocalStorage到这个,以使它的工作

function loadFromLocalStorage() {
    try {
      const serialisedState = AsyncStorage.getItem("cartState");
      if (serialisedState === null) return undefined;
      return JSON.parse(serialisedState);
    } catch (e) {
      console.warn(e);
      return undefined;
    }
  }
qc6wkl3g

qc6wkl3g2#

你可以检查存储,如果有这个异步:删除它

相关问题