سلام امیدوارم حالتون خوب باشه
بچه ها چطور میشه کتابخونه dexie که مربوط به indexedDB هستش رو با redux ترکیب کنیم؟!
initialState یک slice رو چطور میشه با دیتاهای دیتابیس لوکال پر کرد؟
ممنون میشم راهنمایی کنید.
@sinashahoveisi
به این شکل پیاده سازیش کردم
categoriesSlice.js
...
export const categories = createAsyncThunk(
"categories/getCategoriesDB",
async (arg, thunkAPI) => {
try {
const res = await db.categories.toArray();
return res;
} catch (error) {
return thunkAPI.rejectWithValue(error);
}
}
);
...
export const categoriesSlice = createSlice({
name: "categories",
initialState,
extraReducers: {
[categories.pending]: (state) => {
state.isLoading = true;
},
[categories.fulfilled]: (state, action) => {
state.isLoading = false;
state.categories = action.payload;
},
[categories.rejected]: (state, action) => {
state.isLoading = false;
state.error = action.payload;
},
},
});
app.js
...
const dispatch = useDispatch();
useEffect(() => {
dispatch(categories());
}, []);
تشکر بابت راهنماییتون🌹🙂
سلام
برای ذخیره کردن یا عملیات persist کردن میتونید از redux-persist استفاده کنید که توی localstorage ذخیره میکنه.
اما اگه حتما خواستید توی indexedDB ذخیره کنید میتونید از پکیج redux-persist-indexeddb-storage استفاده کنید که توی این لینک هم میتونید یک مثال ازش ببینید.
اگه بخواهید خودتون پیاده سازی کنید هم کاری نداره توی useEffect کامپوننت APP پروژه میتونید با dexie دیتا رو بخونید و state جدید رو ذخیره کنید یا اینکه میتونید توی همون initialState توی فایل reducer هم بگیرید و به عنوان state اولیه استفاده کنید
const initialState = {
categories: [],
};
const categories = async () => await db.categories.toArray();
categories().then((res) => initialState.categories.push(...res));
وقتی از دیتابیس یک جدول رو فرا میخونم ی پرامیس برمیگردنه... ولی نمیدونم چرا با این ارور مواجه میشه
index.js:17 Uncaught (in promise) TypeError: Cannot add property 0, object is not extensible
at Array.push (<anonymous>)شاید پاسخ شما همینجا باشد
@sinashahoveisi
پس مابقی عملیات ها چی؟!
مثل add، remove، put و ... کردن توی دیتابیس
اونا رو هم خارج از reducer باید نوشت؟!