تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ Ali Naseri
مدیریت ارور در createAsyncThunk
مجتبی سوری حل شده توسط مجتبی سوری

سلام جناب سوری وقتتون بخیر

 

ببخشید برای زمانی که ما نیاز داریم طبق یک شرطی حالت 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 کردن وجود داره؟

و اینکه من میخوام از toastify استفاده کنم داخل داکیومنت خودش برای استفاده در کنار redux متد رو داخل action creator صدا زده بود وقتی از حالت بالا استفاده میکنیم مجاز هستیم اون رو داخل extra reducer‌ها اجرا کنیم یا باید داخل فانکشنی که با cerateAsyncThunk نوشتیم اجرا بشه

Ali Naseri ۲۹ شهریور ۱۴۰۰، ۱۷:۱۲

برای انجام عملیات reject کردن اگر از قبل شرایط مشخص و بخوای خودت مشخص بکنی که چه مقداری در payload قرار بگیره در شرایطی که به error بخوری میتونی از متد rejectWithValue استفاده بکنی مثال و نحوه استفاده از این متد هم برمیگرده به شرایطی که داری و چند نمونه رو میتونی در داکیومنت در لینک مشاهده بکنی (اگر با مثال‌ها مشکل داشتی اعلام بکن بیشتر در این مورد توضیح بدم)

 

در مورد استفاده از toastify روش‌های مختلفی وجود داره! از اینکه مثل اون حالتی که خودت گفتی انجام بدی تا اضافه کردن یک middleware و ... اصولا باید ببین برای اون پروژه کدوم راحت‌تر و مناسب تر

یک نمونه middleware رو میتونی در این لینک مشاهده بکنی

بهترین پاسخ
مجتبی سوری ۲۹ شهریور ۱۴۰۰، ۲۱:۰۱