سلام جناب سوری وقتتون بخیر
ببخشید برای زمانی که ما نیاز داریم طبق یک شرطی حالت reject رو اجرا کنیم چطور میتونیم عمل کنیم
مثلا من یک api دارم که برای ورود کاربر چه اطلاعات درست باشه چه نباشه استاتوس کد 200 میده بعد داخل status معلوم میشه که یوزر پسورد درست بوده یا نه.
من برای اینکه بتونم زمانی که اطلاعات اشتباه بود حالت rejected رو اجرا کنم اینطور عمل کردم:
export const fetchToken = createAsyncThunk(
'user/login',
async ({username, password}) => {
try {
const {data} = await http.post('/auth/login', {
username,
password
});
if(data.status === 'Error') throw data;
return data;
}
catch (err) {
throw {
message: err.msg,
};
}
}
)
const userSlice = createSlice({
name: 'user',
initialState,
reducers: {},
extraReducers: builder => {
builder.addCase(fetchToken.fulfilled, (state, {payload}) => {
state.token = payload.token;
state.error = null;
});
builder.addCase(fetchToken.rejected, (state, {error}) => {
state.error = error;
})
}
});
به نظرتون راه حل بهتری وجود داره؟
و اینکه الان یه مشکلی هست که ادیتور من زمانی که داخل try یک چیزی رو throw میکنم این وارنینگ رو میده:
'throw' of exception caught locally
Inspection info: Reports a throw statement whose exceptions are always caught by the containing try statement. Using throw statements as a goto to change the local flow of control is confusing.
آیا راه حل دیگه ای به جز throw کردن وجود داره؟
برای انجام عملیات reject کردن اگر از قبل شرایط مشخص و بخوای خودت مشخص بکنی که چه مقداری در payload قرار بگیره در شرایطی که به error بخوری میتونی از متد rejectWithValue استفاده بکنی مثال و نحوه استفاده از این متد هم برمیگرده به شرایطی که داری و چند نمونه رو میتونی در داکیومنت در لینک مشاهده بکنی (اگر با مثال ها مشکل داشتی اعلام بکن بیشتر در این مورد توضیح بدم)
در مورد استفاده از toastify روش های مختلفی وجود داره! از اینکه مثل اون حالتی که خودت گفتی انجام بدی تا اضافه کردن یک middleware و ... اصولا باید ببین برای اون پروژه کدوم راحت تر و مناسب تر
یک نمونه middleware رو میتونی در این لینک مشاهده بکنی
و اینکه من میخوام از toastify استفاده کنم داخل داکیومنت خودش برای استفاده در کنار redux متد رو داخل action creator صدا زده بود وقتی از حالت بالا استفاده میکنیم مجاز هستیم اون رو داخل extra reducer ها اجرا کنیم یا باید داخل فانکشنی که با cerateAsyncThunk نوشتیم اجرا بشه