Я пока не использовал redux-persist
, я использую эту технику , но это не по теме, ваша проблема связана только с redux
.
Это не такработа создателя действия по назначению идентификатора для новой задачи, это работа редуктора.Ваше действие может выглядеть следующим образом:
const addTodo = text => ({
type: ADD_TODO,
text,
})
Это находится в редукторе, который должен находиться nextId
.При запуске (или перезагрузке страницы) это будет 0 или значение, сохраненное в localStorage.Там он будет увеличиваться каждый раз, когда возникает действие ADD_TODO:
const initialState = {
nextId: 0,
}
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'ADD_TODO':
//...
case 'TOGGLE_TODO':
//...
default:
return state
}
}
Я вижу, redux-persist
выполняет всю магию сериализации состояния в хранилище (localStorage для браузера и AsyncStorage для React-Native) и извлекает егопри запуске.Для справки, это то, что я бы сделал для чистого React-приложения (по-старому с localStorage):
- В корне
index.js
после createStore I получить значение из хранилища:const nextIdFromLS = storage.getItem("nextId")
- если это значение существует, я запускаю действие, чтобы установить это значение nextId
store.dispatch(setNextId(nextIdFromLS))
- действие
SET_NEXT_ID
заставляет редуктор обновлять состояние с помощью nextId из localStorage - в следующий раз, когда будет добавлен todo, внутри
case "ADD_TODO":
я сохраню новый todo, как и ожидалось, но я также запустил бы localStorage.setItem("nextId", this.state.nextId++)
, чтобы мы сохранили значение и могли обновить страницу