Как обновить реагирующее состояние - PullRequest
0 голосов
/ 24 апреля 2020

Я получил предопределенные данные пользователя, который вошел в систему с помощью useSelectore в верхней части кода, но когда я хочу изменить значения профиля пользователя

onSubmit=
    {async values => {
                        await updateUser(values).then((data) => {
                        store.dispatch(setCurrentUser(data));
                        store.subscribe();
                        console.log("store", store.getState().auth.user);//it shows the state has been updated

      });
    }}

Изменяется в представлении и был обновлен в базе данных, но когда я обновляю sh страницу, она показывает те же самые старые значения из магазина Мой редуктор

const auth = createSlice({
name: 'auth',
initialState,
reducers: {
    setCurrentUser : (state, action) => {
        state.isAuthenticated = true;
        state.user = action.payload;

    }....})

Документация обновления состояния меня смущает больше

 function select(state) {
  return state.some.deep.property
 }

let currentValue
function handleChange() {
 let previousValue = currentValue
 currentValue = select(store.getState())

 if (previousValue !== currentValue) {
   console.log(
     'Some deep nested property changed from',
     previousValue,
     'to',
     currentValue
    )
 }
}

 const unsubscribe = store.subscribe(handleChange)
 unsubscribe()

1 Ответ

1 голос
/ 24 апреля 2020

Redux - магазин памяти. Затем вы обновите страницу sh, и она исчезнет.

Таким образом, вы должны использовать localStorage или indexedDB для хранения ваших данных.

Посмотрите на такую ​​библиотеку для лучшего понимания https://github.com/rt2zz/redux-persist

Вам необходимо получить начальное состояние из localStorage и сохранять каждое ваше состояние при редуксе в localStorage при каждом изменении.

const storeKey = 'your-unique-key-name';
function persist() {
    localStorage[storeKey] = JSON.stringify(store.getState);
}
store.subscribe(persist);

...
const initialState = localStorage[storeKey] ? JSON.parse(localStorage[storeKey]) : undefined;
...