reactjs - 从 App.js 中的商店访问数据。- Redux 坚持
问题描述
我被这个问题困住了。任何帮助,将不胜感激。
我在我的反应原生应用程序中使用 Redux Persist,我想从 App.js 中的 store.js 访问存储在状态“数字”中的数据。
我在下面粘贴了我的代码。
这是我的actions.js
export const setNumber = number => dispatch => {
dispatch({
type: SET_NUMBER,
payload: number,
});
};
减速器.js
import {SET_NUMBER} from './actions';
const initialState = {
number: [],
};
function numberReducer(state = initialState, action) {
switch (action.type) {
case SET_NUMBER:
return {...state, number: action.payload};
default:
return state;
}
}
export default numberReducer;
store.js
import {createStore, combineReducers, applyMiddleware} from 'redux';
import thunk from 'redux-thunk';
import AsyncStorage from '@react-native-async-storage/async-storage';
import {persistStore, persistReducer} from 'redux-persist';
import numberReducer from './reducers';
const persistConfig = {
key: 'root',
storage: AsyncStorage,
whitelist: ['number'],
};
const rootReducer = combineReducers({
numberReducer: persistReducer(persistConfig, numberReducer),
});
const store = createStore(rootReducer, applyMiddleware(thunk));
const persistor = persistStore(store);
export {store, persistor};
应用程序.js
import React, {Component} from 'react';
import {View, Text, SafeAreaView, Button} from 'react-native';
import {NavigationContainer} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
import {Provider} from 'react-redux';
import {store, persistor} from './redux/store';
import {PersistGate} from 'redux-persist/integration/react';
import {connect} from 'react-redux';
import Login from './screens/Login';
import Home from './screens/Home';
import Details from './screens/Details';
const Stack = createNativeStackNavigator();
function App() {
if (number == null) {
return (
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Home"
component={Home}
options={{
headerStyle: {
backgroundColor: 'lightblue',
},
}}
/>
</Stack.Navigator>
</NavigationContainer>
);
} else {
return (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen
name="Login"
component={Login}
options={{
headerStyle: {
backgroundColor: 'lightblue',
},
}}
/>
<Stack.Screen
name="Home"
component={Home}
options={{
headerStyle: {
backgroundColor: 'lightblue',
},
}}
/>
<Stack.Screen
name="Details"
component={Details}
options={{
headerStyle: {
backgroundColor: 'lightblue',
},
}}
/>
</Stack.Navigator>
</NavigationContainer>
</PersistGate>
</Provider>
);
}
}
export default App;
我想访问“数字”中的数据,以便我的“如果条件”可以在 App.js 中工作现在它说找不到变量“数字”,这是可以理解的。有什么方法可以访问“数字”中的数据以使条件正常工作。提前致谢。
解决方案
您正在寻找 react-redux 的“useSelector”钩子。你会像这样实现它。
const num = useSelector(state => state.numberReducer.number)
但这里的问题是它不起作用,因为它不在提供者/商店内。您需要对那里的条件语句进行少量修改,以确保您可以访问商店。
<Provider store={store}
<PersistGate loading={null} persistor={persistor}>
<NavigationContainer>
---
do your conditional stuff here, but in another file. use the
useSelector there. ideally put the conditional in the prop
'initialRouteName' as I mentioned in a comment below
---
</NavigationContainer>
</PersisGate>
</Provider>
推荐阅读
- javascript - 上传内容时出现 Firebase 存储错误(错误?)
- laravel - Laravel Voyager 登录后重定向到其他页面
- string - 单字符串列表的内存分配率高于多字符串列表
- python - 将avro文件批量索引到elasticsearch
- java - yaml 等于 equalsIgnoreCase
- node.js - 在 Cloud Function 中“重定向”后做些什么?
- python - Linter flake8 找不到 flake8,即使指定了 executablePath
- docker - 我怎样才能让 letencrypt 与 docker-compose 一起为已经拥有 fullchain.pem 的现有网站工作
- azure - Azure Function App Service 定价是多少?
- c# - C#:如何指示正在从项目外部使用一个假定未使用的方法?