محمد
4 سال پیش توسط محمد مطرح شد
3 پاسخ

مشکل در reactjs و axios

من تو دوره react اقای موسوی شرکت کردم و الان با یک مشکل برخورد کردم
من از redux دارم برای پیاده سازی معماری flux استفاده میکنم
ببینید من یک فایل reducer دارم که داخلش action هارو تحلیل میکنه و برای هر action میاد یکسری کارا رو میکنه و در نهایت state های جدید رو برمیگردونه .
تا قبل از استفاده کردن از axios همه چیز خوب بود . اما الان وقتی از axios استفاده کردم مشکل خوردم .

سناریو به این شکل هست که اکشن add صدا زده میشه و با axios ما میایم مقادیر جدیدرو داخل db اعمال میکنیم و یک ارایه رو تغییر میده و اونو به عوان مقدار جدید بر میگردونه .
اما بعد از اینکه سیستم میره داخل تابع then و تغییراتو اعمال میکنه بعدش دیگه ارایه من (mytodos) بروز رسانی نمیشه

const my_project_state={
    todos:[],
}
function reducer_for_todos2(state=my_project_store, action){

    if(action.type=='add'){

        let mytodos=state.todos;

        /*
        * اعمال تغییرات بر روی دیتابیس به صورت ایجکس توسط اکسیوس
        * */
        axios.post(`https://react-course-b6946.firebaseio.com/todos.json`,...action.value)

            .then(r=>{
                mytodos=[...state.todos,action.value];
                console.log(r)
            })

            .catch(e=>{
                console.log(e)
            })

        /*
        *
        * مشکل اینجا هست که بعد از موفقیت آمیز بودن درخواست axios ما ( تابع then ) , مقادیر داخل then برای return اعمال نمیشه
        *
        * */

        return{
            todos:mytodos,
        }

    }

    return state;
}

export default reducer_for_todos2;

ثبت پرسش جدید
محمد
@mohammadhttp 4 سال پیش مطرح شد
0

من از promis ها هم استفاده کردم اما نتونستم پیادش کنم .
ممنون میشم راهماییم کنید جناب موسوی @hesammousavi


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

دوست عزیز اینطوری نیست داستان
شما اول در برنامه‌اتون از axios اطلاعاتی که مد نظر هست رو دریافت میکنید دریافت کردید حالا هر چی که هست acion مربوطه رو فراوخونی میکنید اگرم نیاز باشه از طریق action اطلاعاتی جدید دریافتی رو پاس میدید.
هیچ وقت داخل reducer نیاید از درخواست ajax استفاده کنید.


thrashzone13
تخصص : PHP Laravel Developer
@thrashzone13 4 سال پیش آپدیت شد
0

سلام. هنگام کار با redux درخواست های http رو بهتره به action ها منتقل کنید.برای اینکار میتونین از middleware های redux-thunk یا redux-saga استفاده کنید.پیشنهاد من thunk هستش بخاطر ساده تر بودن. لینک زیر میتونه کمکتون کنه
https://daveceddia.com/what-is-a-thunk/


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام