Неверный вызов ловушки. Хуки могут быть вызваны только внутри тела функционального компонента. в магазине polaris - PullRequest
0 голосов
/ 21 июня 2020

Я использую Shopify Polaris для создания приложения, и у меня есть общий метод отправки данных для получения данных, но когда я это делаю, я получаю следующую ошибку. Пожалуйста, помогите мне сделать это : Неверный вызов ловушки. Хуки могут быть вызваны только внутри тела функционального компонента. Это могло произойти по одной из следующих причин:

  1. Возможно, у вас несовпадающие версии React и средства визуализации (например, React DOM)
  2. Возможно, вы нарушаете правила хуков
  3. У вас может быть несколько копий React в одном приложении См. Советы по отладке и устранению этой проблемы.
import Path from './Path';
import StatusValidation from './Validation';
import { useCookies } from 'react-cookie';
import React, {useCallback, useState, useEffect} from 'react';

export function PostBeforeLogin(pathValue, type, userData) {
    return new Promise((resolve, reject) => {
        fetch(Path(pathValue) + type, {
            method:'POST',
            body:JSON.stringify(userData),
            headers: {'Content-Type':'application/json'},
        })
        .then((response) => StatusValidation(response))
        .then((responseJson) => {
            resolve(responseJson);
        })
        .catch((error) => {
            reject(error);
        });
    });
}

export function PostData(pathValue, type, userData, formData = false) {
    const [cookies, setCookie] = useCookies(['acToken']);
    
    return new Promise((resolve, reject) => {
        fetch(Path(pathValue) + type, {
            method:'POST',
            body: formData ? userData :JSON.stringify(userData),
            headers: {
                'Content-Type': formData ? 'multipart/form-data' : 'application/json',
                'Authorization': 'Bearer ' + cookies.acToken
            },
        })
        .then((response) => StatusValidation(response) )
        .then((responseJson) => {
            resolve(responseJson);
        })
        .catch((error) => {
            reject(error);
        });
    });
}

1 Ответ

0 голосов
/ 21 июня 2020

попробуйте следующее:

export function PostData(pathValue, type, userData, formData = false, cookies) {
    return new Promise((resolve, reject) => {
        fetch(Path(pathValue) + type, {
            method:'POST',
            body: formData ? userData :JSON.stringify(userData),
            headers: {
                'Content-Type': formData ? 'multipart/form-data' : 'application/json',
                'Authorization': 'Bearer ' + cookies.acToken
            },
        })
        .then((response) => StatusValidation(response) )
        .then((responseJson) => {
            resolve(responseJson);
        })
        .catch((error) => {
            reject(error);
        });
    });
}

передайте cookies в качестве аргумента этой функции и удалите useCookies. затем переместите этот код: const [cookies, setCookie] = useCookies(['acToken']); туда, где вы вызываете PostData(), и он должен работать

...