Почему в моем приложении React Native не будет обновляться состояние редуктора со второго редуктора? - PullRequest
0 голосов
/ 28 апреля 2020

Таким образом, я использую 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>
  );
};

Это мой первый раз, когда я использую редукс, и я был в тупике часами. Если бы кто-нибудь мог помочь, я был бы очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...