Таким образом, я использую Redux с Persist-Reduce и Redun-Thunk в своем приложении React Native Cli. Мой первый кусочек состояния в 'user' работает совершенно нормально. Я добавил еще один фрагмент состояния под названием «post» с одним свойством «posts». Когда я пытаюсь обновить его, отправляя действие в моем компоненте, я вижу, что действие отправляется, данные поступают в полезную нагрузку и отправляются моему редуктору, однако мои «записи» остаются в своем исходном состоянии, равном нулю.
Вот мой редуктор 'post':
import UPDATE_POSTS from '../actions/post';
const post = (state = {posts: null}, action) => {
switch (action.type) {
case UPDATE_POSTS:
return {...state, posts: action.payload};
default:
return state;
}
};
export default post;
Мое действие:
export const UPDATE_POSTS = 'UPDATE_POSTS';
export const getPosts = (email, token) => {
return async dispatch => {
try {
const config = {
headers: {Authorization: `Bearer ${token}`},
};
const response = await axios.get(
BASE_URL + '/api/posts/' + email,
config,
);
dispatch({type: UPDATE_POSTS, payload: response.data.posts});
} catch (e) {
console.log(e);
}
};
};
componentDidMount (), где я вызываю действие:
state = {loading: true};
componentDidMount() {
(async () => {
await getToken();
await getPosts(this.props.user.currentUser.email, this.props.user.token);
this.setState({loading: false});
})();
}
Дополнительные настройки в случае, если я что-то неправильно настроил ...
Вот мой магазин с исключенным импортом:
const middleware = applyMiddleware(thunkMiddleware, logger);
const persistConfig = {
key: 'root',
storage: AsyncStorage,
stateReconciler: autoMergeLevel2,
whitelist: ['user'],
};
const pReducer = persistReducer(persistConfig, rootReducer);
export const store = createStore(pReducer, middleware);
export const persistor = persistStore(store);
Мои объединенные значения:
import {combineReducers} from 'redux';
import user from './user';
import post from './post';
export default combineReducers({user, post});
Приложение. js:
const App: () => React$Node = () => {
return (
<Provider store={store}>
<PersistGate loading={LoadingView} persistor={persistor}>
<Navigator />
</PersistGate>
</Provider>
);
};
Это мой первый раз, когда я использую редукс, и я был в тупике часами. Если бы кто-нибудь мог помочь, я был бы очень признателен!