#react-native #redux
Вопрос:
Я пытаюсь понять, как использовать Redux в моем собственном приложении React.
Я использую Realm в качестве локальной базы данных, и я довольно смущен тем, как ее реализовать. В Realm я сохраняю массив пользовательских объектов, поэтому при запуске приложения я хочу извлечь массив и установить его в состояние приложения.
Насколько я понимаю, мне нужно совершить действие, которое выглядит так:
export const fetchItems = () => {
return (dispatch) => {
dispatch({
type: "FETCH_ITEMS",
})
}
}
И есть редуктор, который выглядит примерно так:
const initialState = {
items: [],
}
const reducer = (state = initialState, action: AnyAction) => {
switch (action.type) {
case ActionType.fetchItems:
return {
...state,
items: action.payload
}
break;
default:
return state;
}
}
Но я не совсем уверен, как мне следует использовать это, например, на главном экране.
Я думаю, это должно быть что-то вроде этого:
const { items } = useSelector(state => store.getState().items)
Но затем, когда я добавляю новый элемент в базу данных, я, конечно, должен обновить базу данных, так когда я должен обновить состояние? Я пытался читать статьи и смотреть некоторые учебные пособия, но все работают немного по-другому, и это еще более запутанно.
До сих пор то, что я написал о Redux, верно? стоит ли использовать его вот так?
Комментарии:
1. В вашем thunk
fetchItems
вы должны получить свои элементы из базы данных Realm, а затем отправить их в полезной нагрузкеFETCH_ITEMS
действия , чтобы сохранить элементы в вашем редукторе. Что-то вроде этого:export const fetchItems = () => { return async (dispatch) => { // This is pseudo code, since I don't know how to use Realm const realmDbItems = await Realm.table('items') dispatch({ type: "FETCH_ITEMS", payload: realmDbItems }) } }
2. Возможно, хорошим вариантом также было бы использовать
observables
и наблюдать за своим состоянием. Поэтому всякий раз, когда что-то в вашем состоянии меняется, вы также отражаете это обновление в своей базе данных области. Если вы еще этого не сделали, взгляните на redux-наблюдаемые