Ich habe das in den letzten paar Stunden recherchiert, und ich bin jetzt sehr nahe daran, das zu lösen. Alles scheint jetzt zu funktionieren, aber ich habe kein this.props.mutate
in meiner Komponente, die das Apollo HOC hat, das es einwickelt.Wie man Apollo Client richtig in React Native einbindet
Ich verdrahtete Apollo als Reducer, also in meiner Komponente würde ich erwarten, this.props.apollo.mutate
zur Verfügung zu sehen, aber es ist nicht da.
Dies alles ist, was zur Zeit zur Verfügung gestellt werden scheint:
console.log (this.props.apollo)
{"data":{},"optimistic":[],"reducerError":null}
Hier ist, wie es angeschlossen:
./src/apolloClient.js
./src/reducers.js
import client from './apolloClient'
export default combineReducers({
apollo: client.reducer(),
nav: navReducer,
signup: signupReducer,
auth: loginReducer,
})
./src/App.js
import store from './store'
import client from './apolloClient'
const Root =() => {
return (
<ApolloProvider store={store} client={client}>
<RootNavigationStack />
</ApolloProvider>
)
}
export default Root
Oh, und hier ist der Grund meiner Anmeldung Komponente (auch ziemlich Hälfte -baked):
export default compose(
connect(mapStateToProps, {
initiateLogin,
toggleRememberMe
}),
withFormik({
validate,
validateOnBlur: true,
validateOnChange: true,
handleSubmit: ({ tel, password }, { props }) => {
props.apollo.mutate({
variables: { tel, password }
})
.then((res) => {
alert(JSON.stringify(res))
//const token = res.data.login_mutation.token
//this.props.signinUser(token)
//client.resetStore()
})
.catch((err) => {
alert(JSON.stringify(err))
//this.props.authError(err)
})
//props.initiateLogin({ tel, password })
}
}),
graphql(LOGIN_MUTATION, { options: { fetchPolicy: 'network-only' } })
)(LoginForm)
Es fühlt sich an, als ob ich eine Tat brauche ion creator und um es manuell zu meiner Komponente zuzuordnen. Was muss ich tun, um diese lose gezeigte Mutation auszuführen LOGIN_MUTATION
onSubmit?
Ich bin derzeit verwirrt durch die Tatsache this.props.apollo
hat Apollo Daten drin, aber es gibt keine mutate
.
Ich sehe die Lösung hier nicht: http://dev.apollodata.com/react/mutations.html oder vielleicht tue ich - muss ich das betrachten?
Ich möchte es an den Punkt bringen, wo die Komponente die Mutation aufrufen kann, wenn es nötig ist. Ich möchte auch, dass es unter this.props.something
verfügbar ist, also kann ich es von der handleSubmit-Funktion von Formik aufrufen, aber ich bin offen für Vorschläge, die die beste deklarative Skalierbarkeit ermöglichen.
[Bearbeiten] Hier ist der Code, den ich gelöst lege mir:
./src/apolloClient.js
Diese Datei wurde verschrottet.
./src/reducers.js
entfernte ich das Apollo Minderer und Client-Referenz.
./src/App.js
Ich habe den Apollo-Client in der Root-Komponente. Ich habe diese Technik von Nader Dabits Medium Post bekommen. Er verdeutlicht dies in einem GitHub Repo:
- https://github.com/react-native-training/apollo-graphql-mongodb-react-native
- https://medium.com/react-native-training/react-native-with-apollo-part-2-apollo-client-8b4ad4915cf5
Hier ist, wie es umgesetzt aussieht:
const Root =() => {
const networkInterface = createNetworkInterface({
uri: 'http://localhost:8000/graphql',
opts: {
credentials: 'same-origin',
mode: 'cors'
}
})
networkInterface.use([{
async applyMiddleware(req, next) {
try {
if (!req.options.headers) req.options.headers = {}
const token = await AsyncStorage.getItem('token')
req.options.headers.authorization = token || null
next()
} catch (error) {
next()
}
}
}])
const client = new ApolloClient({
networkInterface,
dataIdFromObject: (o) => o.id
})
return (
<ApolloProvider store={store} client={client}>
<RootNavigationStack />
</ApolloProvider>
)
}
export default Root
Ich denke, dass 'options.props' ist, was ich brauche. Ich untersuche es gerade. – agm1984
Für alle, die dies in Zukunft sehen, lesen Sie bitte die React Native-Dokumentation über AsyncStorage. Sie sollten Ihre eigene Instanz davon erstellen. Verwenden Sie es nicht direkt aus dem Paket, da es globale Elemente enthält. Mein Code zeigt es so, aber es ist weil der Code nicht abgeschlossen ist. – agm1984