0

背景

我正在使用 expo 在我的 android 手机上查看我的 react native 应用程序。我已经实现了应用程序从中检索数据的节点服务器。为了检索数据,我正在使用该库redux-api-middleware并将其存储在 redux 存储中。

我之前在常规反应应用程序中使用过这个设置,但不是 react-native。

问题

当我在 expo 中将应用程序从开发模式切换到生产模式时,我对服务器的调用不再起作用。我得到以下响应,而不是开发模式下的数据。

Object {
   "error": true,
   "payload": [InvalidRSAA: Invalid RSAA],
   "type": Symbol {
     "_k": "Symbol(REQUEST_TEST_REQ)_l.b74uhq9lvf",
   },
}

我当前的通话

import { RSAA } from 'redux-api-middleware';
import { NODE_API_URL } from 'react-native-dotenv';


export const REQUEST_TEST_REQ = Symbol('REQUEST_TEST_REQ');
export const REQUEST_TEST_SUC = Symbol('REQUEST_TEST_SUC');
export const REQUEST_TEST_FAIL = Symbol('REQUEST_TEST_FAIL');

const requestSomeDataFromTheServer = () => {
    return {
        [RSAA]: {
            endpoint: `${NODE_API_URL}/api/test`,
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            types: [
                REQUEST_TEST_REQ,
                REQUEST_TEST_SUC,
                REQUEST_TEST_FAIL
            ]
        }
    }
};

export { requestSomeDataFromTheServer };

问题

所以我遵循了 RSAA 请求的规则,但是一旦提出请求,我就会看到这个失败。它绝对不是我的节点服务器,因为它在开发模式下工作。有人可以为我解释一下这个问题吗?

4

1 回答 1

1

符号在生产模式下创建无效请求

我认为这可能是生产中 fetch 的问题,所以我先添加了一个 polyfill,但这并没有帮助。这给了我将一切回归基础的想法,因此我将符号转换为字符串。

export const REQUEST_TEST_REQ = 'REQUEST_TEST_REQ';
export const REQUEST_TEST_SUC = 'REQUEST_TEST_SUC';
export const REQUEST_TEST_FAIL = 'REQUEST_TEST_FAIL';

通过将这些更改回纯字符串,请求是有效的,因此我的问题得到了解决。

我仍然不知道为什么符号在生产模式下会中断,因为它们在开发中工作正常。此外,我正在使用 babel polyfill 使它们“安全”使用。

如果有人能解开这个谜团的其余部分,那就太好了。

于 2018-01-03T09:20:16.187 回答