使用 Apollo 响应本机授权:使用令牌创建客户端。无法将令牌设置为 header
React Native authorization with Apollo: create client with token. Cannot set token to header
let [loading, setLoading] = useState(true);
let client = new ApolloClient({
uri: 'https://39990dea.ngrok.io/graphql',
});
let init = async () => {
let token = await AsyncStorage.getItem('token');
if (!!token) {
store.dispatch(userLoaded(token));
client = new ApolloClient({
request: (operation) => {
operation.setContext({
headers: {
authorization: token ? token : '',
},
});
},
});
console.warn('user with token created');
console.warn(token);
console.warn('token is taken');
}
setLoading(false);
};
useEffect(init, []);
我正在创建 apollo 客户端。然后我设置 header 如果 AsyncStorage 中有令牌就用令牌请求。
return (
<ApolloProvider client={client}>
<Provider store={store}>
<AppNavigator/>
</Provider>
</ApolloProvider>
);
但是当我发出请求时,Graphql error: notoken 出现了。我做错了什么吗?
您正在初始化您的客户端并异步更改它,但您的组件没有重新呈现。所以你有两个选择:
useState so that your app re-rendered
或
call forceUpdate
function
let [loading, setLoading] = useState(true);
let client = new ApolloClient({
uri: 'https://39990dea.ngrok.io/graphql',
});
let init = async () => {
let token = await AsyncStorage.getItem('token');
if (!!token) {
store.dispatch(userLoaded(token));
client = new ApolloClient({
request: (operation) => {
operation.setContext({
headers: {
authorization: token ? token : '',
},
});
},
});
console.warn('user with token created');
console.warn(token);
console.warn('token is taken');
}
setLoading(false);
};
useEffect(init, []);
我正在创建 apollo 客户端。然后我设置 header 如果 AsyncStorage 中有令牌就用令牌请求。
return (
<ApolloProvider client={client}>
<Provider store={store}>
<AppNavigator/>
</Provider>
</ApolloProvider>
);
但是当我发出请求时,Graphql error: notoken 出现了。我做错了什么吗?
您正在初始化您的客户端并异步更改它,但您的组件没有重新呈现。所以你有两个选择:
useState so that your app re-rendered
或
call
forceUpdate
function