gpt4 book ai didi

react-native - React native 和 redux 仍然无法正常工作

转载 作者:行者123 更新时间:2023-12-04 03:07:09 35 4
gpt4 key购买 nike

我正在使用 redux-persist 将数据存储在我的 react-native 应用程序中。
这是代码:

商店.js

import { createStore, compose, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import {
persistStore,
persistCombineReducers,
} from 'redux-persist';
import { AsyncStorage } from 'react-native';
import { composeWithDevTools } from 'redux-devtools-extension';
import user from './reducers/user';
import auth from './reducers/auth';

const config = {
key: 'root',
storage: AsyncStorage,
};

const reducers = persistCombineReducers(config, {
user,
auth
});

export const configureStore = () => {
const store = createStore(
reducers,
compose(
applyMiddleware(thunk),
)
);
const persistor = persistStore(store);

return { persistor, store };
};

然后在 App.js 我有这个:

const { persistor, store } = configureStore();
const onBeforeLift = () => {
// take some action before the gate lifts
store.dispatch(startingApp());
}
return (
<Provider store={store}>
<PersistGate
loading={<HomeLoader />}
onBeforeLift={onBeforeLift}
persistor={persistor}>
<RootNav />
</PersistGate>
</Provider>

当我从 App.js componentDidMount 调度和操作时,一切正常。
问题是,例如,当我从组件中触发操作时,状态未存储,因此当我重新启动应用程序时,状态消失了。

我所做的只是调用操作并传递数据:

this.props.onSetAuthData(data.credentials);

正如我在控制台中看到的那样,状态已更新,但是如果我重新启动应用程序,则只会保存 App.js 中操作创建的状态,而不是其中的状态

也许这与 RootNav 组件有关?

也许我导出的 reducer 有误?
我有
const user = (state = initialState, action = {}) => {}
导出默认用户。
另一个 reducer 相同:
const auth = (state = initialState, action = {}) => {}
导出默认身份验证。

然后我导出
combineReducers({auth, user})

这是错误的吗?

最佳答案

使用 Reacttotron 之类的工具来查看您的商店是否持久化。

https://github.com/infinitered/reactotron

如果它已经持久化,您的组件应该等到应用程序启动时商店重新水化。有时我不能使用 redux 持久化 persistgate等待持久存储重新水化。所以我在 async componentWillMount 上将存储和持久化设置为状态然后在您的渲染中,检查商店是否不为空(空)并且已经重新水化,然后加载您的应用程序。

  constructor(){
super();
this.state = {store: null, persistor: null}
}
async componentWillMount () {
const store = configureStore();
this.setState({ store: store.store })
this.setState({ persistor: store.persistor })
}
render(){
return (
if (this.state.store === null) {
return (
<View>
<Text>Loading...</Text>
</View>
);
}
<Provider store={this.state.store} persistor={this.state.persistor}>
<RootNav />
</Provider>

也尝试从 AsyncStorage 更改您的存储至 storage .

const config = {
key: 'root',
storage,
};

先导入存储 import storage from 'redux-persist/es/storage';

关于react-native - React native 和 redux 仍然无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47893771/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com