Смущен тем, как я должен работать с Redux и базой данных

#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-наблюдаемые