Сохраняйте списки из Redx до их изменения - PullRequest
0 голосов
/ 26 марта 2020

У меня есть userDetails в избыточном хранилище, и перед входом пользователя ключ id в userDetails пуст и имеет wishList: [], shoppingCart: [] для гостя. так что гость также может добавлять элементы в списки. Когда гость входит в систему, если после входа в систему появляются элементы в списке, я показываю Modal и говорю пользователю: «У вас есть элементы в списках, вы хотите добавить их к своему пользователю?», Если пользователь принимает I хотите объединить списки до их изменения и списки пользователей из запроса GET и после отправки объединенных списков в запрос PATCH. поэтому, прежде чем я вызову userDetailsChanged (резервное действие), я попытался сохранить списки некоторыми способами, такими как state, useRef, а также в избыточном виде, например: before: {wishList:[], shoppingCart:[]} и вызвать beforeListsChanged action.

Это работает так: GET req -> сохранить списки из userDetails -> изменить userDetails -> Показать Modal -> принять -> объединить списки до и списки пользователей без дубликатов -> PATCH.

Проблема в том, что независимо от того, каким образом я сохраняю списки, они являются новыми списками из запроса GET, а не предыдущими гостевыми списками. так что все время слияние одинаково, потому что раньше wishList было таким же, как пользователь wishList, а также shoppingCart

код:

try {
        const responseData = await sendRequest(
            'http://localhost:5000/api/users/login',
            'POST',
            JSON.stringify({
                email: formState.inputs.email.value,
                password: formState.inputs.password.value
            }),
            { 'Content-Type': 'application/json' }
        );

        if (before.wishList.length > 0 || before.shoppingCart.length > 0)
            showConfirmModalHandle(event); //!show the confirmModal

//Here I tried the three ways (state, useRef.current=...,redux before lists like below)
//I prefer not to do this way because it looks bad, taking the lists here from userDetails would be much better.

        setBeforeLists({
            wishList: userDetails.wishList,
            shoppingCart: userDetails.shoppingCart
        }); //beforeListsChanged action

        setUserDetails(responseData);//userDetailsChanged action
}

Теперь, если пользователь принял go для эта функция:

Итак, проблема в том, что независимо от того, каким образом я сохраняю списки в этой функции, всегда будут новые списки, которые я получал после входа в систему.

const addToWishCart = async () => {
        let responseData;
        let afterWishList = new Set();
        let afterShoppingCart = new Set();
        let mergeWishLists, mergeShoppingCarts;

        mergeWishLists = merge(before.wishList, userDetails.wishList);
        mergeShoppingCarts = merge(before.shoppingCart, userDetails.shoppingCart);

        for (let i = 0; i < mergeWishLists.length; i++)
            afterWishList.add(mergeWishLists[i]);
        for (let i = 0; i < mergeShoppingCarts.length; i++)
            afterShoppingCart.add(mergeShoppingCarts[i]);
        afterWishList = toArray(afterWishList);
        afterShoppingCart = toArray(afterShoppingCart);

        responseData = await sendRequest(
            'http://localhost:5000/api/users/' + userDetails.id,
            'PATCH',
            JSON.stringify({
                wishList: afterWishList,
                shoppingCart: afterShoppingCart,
                type: 'wishCart',
                firstName: userDetails.firstName,
                lastName: userDetails.lastName,
                address: userDetails.address
            }),
            {
                'Content-Type': 'application/json'
            }
        );
        setUserDetails(responseData);
        setBeforeLists({ wishList: [], shoppingCart: [] });
        ShowAndHideModalHandle();
    };

Как сохранить предыдущие значения в моих userDetails?

Кроме того, если это возможно без списков перед в редуксе, я бы хотел получить этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...