如何在Apollo客户端中设置全局变量

时间:2019-07-23 12:45:02

标签: reactjs graphql react-apollo apollo-client

我正在尝试为所有graphql查询设置全局变量,我使用的是Apollo-client,它在其设置中提供了defaultOptions,可以在其中设置变量,但是突变和突变更新中的查询会忽略它们。

return new ApolloClient({
    connectToDevTools: isBrowser,
    ssrMode: !isBrowser, // Disables forceFetch on the server (so queries are only run once)
    link: new HttpLink({
        uri: GRAPHQL_URL, // Server URL (must be absolute)
        credentials: 'same-origin', // Additional fetch() options like `credentials` or `headers`
        // Use fetch() polyfill on the server
        fetch: !isBrowser ? fetch : undefined,
    }),
    cache: new InMemoryCache().restore(initialState || {}),
    defaultOptions: {
        mutate: { variables: { domain: NEW_YORK_GQL_DOMAIN } },
        watchQuery: { variables: { domain: NEW_YORK_GQL_DOMAIN } },
        query: { variables: { domain: NEW_YORK_GQL_DOMAIN } },
    },
});

真的不知道我在做什么错,感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用其他变量调用map,它将完全覆盖默认变量。因此,您应该能够执行以下操作:

render() {
        console.log('render started');
        return (
            <div>
                {this.state.exRates.map(rate => {
                   return <div>{rate.toString()}</div>
                 })}
                <button 
                    type="button" 
                    className="btn"
                    onClick={() => {
                        this.getCurrencyRatesFromDB();                                          
                    }}
                    >
                        Load rates
                </button>
                <p>{this.state}</p>
        </div>        
        )
    }

诸如ApolloClient.query之类的钩子似乎可以正确地将默认变量与任何其他变量合并,因此不需要这样做。