Как я могу перезапустить мои значения initialState в Redux - PullRequest
0 голосов
/ 28 мая 2018

Привет всем, я новичок, использующий избыточность в моем приложении «Русский».ну, я сохранил неверную информацию в своем InitialState навигатора, поэтому при попытке перезагрузить приложение в эмуляторе Android я получаю эту ошибку

Invariant Vilation: для ключевого пользователя не определен маршрут.Должно быть одним из: 'Main', 'Welcome'

enter image description here

Ошибка произошла, потому что в этом методе

действия/user.js

export function loginWithFacebook(facebookAccessToken) {
return (dispatch) => {
return fetch(`${HOST}/api/v1/facebook`, {
  method: 'POST',
  body: JSON.stringify({
    facebook_access_token: facebookAccessToken,
  }),
  headers: { "content-type": "application/json" },
})
.then(response => response.json())
.then(json => {
  console.log(json);

  if (json.access_token) {
    dispatch(setAccessToken(json.access_token));
    dispatch(setProfile(normalizeProfile(json.email, json.fullname, json.image)));
    dispatch(resetRoute({ routeName: 'Welcome' }));
  } else {
    alert(json.error);
  }
})
.catch(e => alert(e)); }; }

В этой строке произошла ошибка

dispatch (resetRoute ({routeName: 'Welcome'}));

Я написал "Home" вместо "Welcome"

, и вместо этого в моем initialState nav было добавлено значение Home вместо значения Welcome

actions / nav.js

export function resetRoute(route) {
return (dispatch, getState) => {
const nav = getState().nav;
dispatch(NavigationActions.reset({
  index: 0,
  key: null,
  actions: [
    NavigationActions.navigate(route)
  ]
})); }; }

Редукторы

index.js

export default combineReducers({
nav,
user });

nav.js

const initialState =        AppNavigator.router.getStateForAction(NavigationActions.reset({
index: 0,
actions: [
  NavigationActions.navigate({
    routeName: 'Main',
  }),
], }));

export default function(state = initialState, action) {
  //state = undefined;
  const nextState = AppNavigator.router.getStateForAction(action,    state);
  return nextState || state;
};

Метод выше вызывает исключения, потому что, когда он вызывает AppNavigator.router.getStateForAction (action, state);он получает «Home» вместо «Welcome», поэтому в основном мне нужно перезапустить initialState к началу

Как можно вручную установить все мои редукторы initialState ВРУЧНУЮ?Помните, я не вижу экран в моем эмуляторе Android, поэтому я не могу запускать действия с помощью кнопок или чего-то подобного.

Я нашел эту статью: Как сбросить состояние магазина Redux? но в моем случае я не вижу экрана для запуска действия Logout.

Решение, которое я считаю, состоит в том, чтобы установить нулевое или пустое значение initialState моих редукторов, чтобы оно могло начинаться с самого начала.но как я могу это сделать?

1 Ответ

0 голосов
/ 29 мая 2018

Итак, ваша основная проблема в том, что вы хотите сбросить состояние магазина, но вы даже не можете получить доступ к первому экрану, поэтому вы не можете отправить действие на экране, чтобы сбросить его, я прав?

Что вы можете сделать, вместе с другим ответом на стек, который вы связали: Как сбросить состояние хранилища Redux? , вы можете сбросить состояние до отображения экрана.

Если у вас есть ваши редукторы, как там упоминалось, вы можете отправить действие до отображения экрана.Например, в индексе вашего приложения.Вы можете сделать это, например, в индексном файле.

Этого можно добиться, не используя react-redux, а отправляя действие непосредственно в магазин, используя метод dispatch .

Что-то вроде store.dispatch(<Reseting action goes here>) в вашем индексефайл, прежде чем вы на самом деле рендеринг экрана.

Надеюсь, это поможет!Дайте мне знать, если у вас возникнут какие-либо проблемы или если это не достаточно ясно.Ура!

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