在我的应用程序中,主页从我的其余API中获取Json响应。然后我将产品添加到购物车数组中。最初,我的商店值为..
const DEFAULT_STATE_TRENDING = {
data:{},
specialoffdata:[],
banner:[],
offerstitle:[],
cart:[],
cartcount:0,
isFetching:false,
dataFetched:false,
error:false,
}
添加产品后,购物车阵列和购物车数量变为..
cart:[{...},{...}],
cartcount:cart.length
现在,我关闭了我的应用程序。重新加载应用程序后,购物车数组变空。如何在此处保留商店值?
答案 0 :(得分:5)
持久存储值的最佳方法是使用这个很棒的库。 Redux Persist
它包含各种methods
和levels
persistance
,易于使用。
Installation
和basic usage
已在github docs上详细记录。
答案 1 :(得分:1)
最简单的方法是使用AsyncStorage
let response = await AsyncStorage.getItem('count'); //Read
AsyncStorage.setItem('count', this.state.count + '');
这样,您可以访问每个组件中的“计数”。
最现代的方法是使用react的新上下文api,定义上下文提供程序并在任何地方使用它:
const ThemeContext = React.createContext('light')
class ThemeProvider extends React.Component {
state = {theme: 'light'}
render() {
return (
<ThemeContext.Provider value={this.state.theme}> //<--- 'light' is exposed here
{this.props.children}
</ThemeContext.Provider>
)
}
}
class App extends React.Component {
render() {
return (
<ThemeProvider>
<ThemeContext.Consumer>
{item => <div>{item}</div>} //<-- you consume the value ('light') here
</ThemeContext.Consumer>
</ThemeProvider>
)
}
}
无论哪种方式,它都比Redux或MobX更轻松,更容易。
答案 2 :(得分:0)
我使用了AsyncStorage。这样,即使重新加载,关闭和打开应用程序,我仍然保留了我的商店状态值。
configureStore.js:
import {createStore, applyMiddleware,compose} from 'redux';
import thunk from 'redux-thunk';
import { autoRehydrate } from 'redux-persist';
import allReducers from './reducers';
import { AsyncStorage } from 'react-native';
const middleware = [ thunk,
];
export default function configureStore() {
let store= createStore(
allReducers,
{},
compose(applyMiddleware(...middleware),autoRehydrate())
);
console.log("Created store is"+store);debugger
return store;
}
App.js:
const store = configureStore();
export default class App extends Component {
componentDidMount() {
console.log("App.js started and its store value is"+store);debugger
SplashScreen.hide()
persistStore(
store,
{
storage : AsyncStorage,
whitelist : ['trending']
}
);
}
render() {
return (
<Provider store={store}>
<MyStack/>
</Provider>
);
}
}