Как ждать, пока значение контекста не будет установлено |React Hooks - PullRequest
3 голосов
/ 17 апреля 2019

Как мне ждать, пока значение контекста не будет установлено?

У меня была проблема, когда я не мог получить значение из своего контекста, поэтому, когда мне это было нужно, я всегда получал начальное значение "".Так что теперь у меня есть useEffect в моем компоненте,

useEffect(() => {
    if (posContext.activePaymentTabId) {
        console.log("poscontext i useeffect", posContext); <-- can see my value here now
        // handlePaymentResponse(true, "GODKÄNT");
    }
}, [posContext.activePaymentTabId]);

Я установил свое значение в этой функции:

const makeCardPayment = async () => {
    posContext.handleSetActivePaymentTabId(); // <-- Here I set my value that I need later
    try {
        const res = await functionA();

        return functionB(res.foo);

    } catch (error) {}
};

Но в functionB, где мое значение необходимо:

const functionB = (foo) => {
    if (foo) {
        setTimeout(() => {
            console.log("calling...", posContext); // <-- Now my value is back to it's initial
        }, 3500);
    }
};

Итак, какие еще варианты у меня есть, когда я хочу получить доступ к своим значениям прямо из моего контекста?

1 Ответ

2 голосов
/ 17 апреля 2019

Поскольку изменение значения контекста отражается только при начальном рендеринге, вы можете передать функцию обратного вызова установщику, который возвращает обновленное значение и передать значение контекста в functionB.

const makeCardPayment = () => {
    posContext.handleSetActivePaymentTabId(async function(updatedContext) {
       try {
        const res = await functionA();

        return functionB(res.foo, posContext);

       } catch (error) {

       }
    });
};

const functionB = (foo, posContext) => {
    if (foo) {
        setTimeout(() => {
            console.log("calling...", posContext); // <-- Now my value is back to it's initial
        }, 3500);
    }
};
...