рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдкрд░ рдореЛрдмрд╛рдЗрд▓ рдЪреИрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛

рдпрд╣ рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ ( рдпрд╣рд╛рдВ рдкрд╣рд▓рд╛) рдЕрдкреЛрд▓реЛ-рд╕рд░реНрд╡рд░-рдХреЛрдЖ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреИрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рдЪреИрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдЗрд╕ рдЪреИрдЯ рдХрд╛ рдмреИрдХрдПрдВрдб рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЖрдк рд▓рд┐рдВрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХреНрд╕рдкреЛ-рдХреНрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдирдпрд╛ рдПрдХреНрд╕рдкреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

expo init 

рдФрд░ рдЦрд╛рд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рд╣рдордиреЗ рдмрдирд╛рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдпрд╛рд░реНрди рдРрдб рдЕрдкреЛрд▓реЛ / рд░рд┐рдПрдХреНрд╢рди-рд╣реБрдХ рдЕрдкреЛрд▓реЛ-рдХреИрд╢-рдЗрдирдореЛрд░реА рдЕрдкреЛрд▓реЛ-рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-http рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рдбрдмреНрд▓реНрдпреВрдПрд╕ рдЕрдкреЛрд▓реЛ-рдпреВрдЯрд┐рд▓рд┐рдЯреАрдЬ рдЧреНрд░рд╛рдлрдХрд▓-рдЯреИрдЧ рджреЗрд╢реА-рдмреЗрд╕ рд░рд┐рдПрдХреНрдЯрд░-рд░рд╛рдЙрдЯрд░-рджреЗрд╢реА рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди-рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ-рдбрдмреНрд▓реНрдпреВрдПрд╕

рд╣реЛ рдЧрдпрд╛, рдЕрдЧрд▓рд╛ рдХрджрдо рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЛрд▓реЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ App.js. рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рдЕрдкреЛрд▓реЛ рдХреЛ http рдФрд░ рд╡реЗрдмрд╕реЛрдХреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рдЕрдкреЛрд▓реЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢ рднреА рдмрдирд╛рдПрдВрдЧреЗ, рд╕рд╛рде рд╣реА 2 рдорд╛рд░реНрдЧ рднреА рдмрдирд╛рдПрдВрдЧреЗ: рдПрдХ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рдЪреИрдЯ рдкреЗрдЬ рдХреЗ рд▓рд┐рдПред

 get link() { const BACKEND_URL = Platform.OS === 'ios' ? 'localhost:3000' : '10.0.2.2:3000'; const httpLink = new HttpLink({ uri: `http://${BACKEND_URL}/graphql` }); const wsLink = new WebSocketLink({ uri: `ws://${BACKEND_URL}/graphql`, options: { reconnect: true } }); return split( // split based on operation type ({ query }) => { const definition = getMainDefinition(query); return ( definition.kind === 'OperationDefinition' && definition.operation === 'subscription' ); }, wsLink, httpLink, ); } async componentDidMount() { const cache = new InMemoryCache(); this.client = new ApolloClient({ link: this.link, cache }); тАж. } render() { return ( ... <ApolloProvider client={this.client}> <NativeRouter> <Route exact path="/" component={UsernameForm}/> <Route path="/chat" component={Chat}/> </NativeRouter> </ApolloProvider> ) } 

рдореИрдВ рдкреНрд░рдкрддреНрд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдХрдИ рдмрд╛рд░ рджреЗрдЦрд╛ рд╣реИ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХрд╛ рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреБрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ред

рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛:

 const [ findOrCreateUser ] = useMutation(FIND_OR_CREATE_USER, { update(cache, { data: { findOrCreateUser: { id, username } } }) { cache.writeQuery({ query: GET_CURRENT_USER, data: { id, username }, }); } }); 

рдпрд╣рд╛рдВ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдореНрдпреВрдЯреЗрд╢рди, рд╕рд╛рде рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓рд╛ рдЖрдЗрдЯрдо рдЪреИрдЯ рд╣реИред

рдлрд┐рд░ рд╕реЗ, рд╣рдо рд▓реЗрдЖрдЙрдЯ рдкрд░ рдирд┐рд╡рд╛рд╕реА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд╕рдВрдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдо рдПрдХ рдирдП рдЪреИрдЯ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рдереНрд░реЗрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╕рдВрджреЗрд╢ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛, рд╕рдВрджреЗрд╢ рдкрд╣рд▓реЗ рд╣реА рдЕрдкреЛрд▓реЛ рдХреИрд╢ рдореЗрдВ рдЬрд╛рдПрдЧрд╛:

 useSubscription(MESSAGE_CREATED, { onSubscriptionData: ({ client, subscriptionData: { data: { messageCreated } } }) => { const { getLast100Messages } = client.readQuery({ query: GET_LAST_100_MESSAGES }); if (messageCreated.user.id !== id) { client.writeQuery({ query: GET_LAST_100_MESSAGES, data: { getLast100Messages: [ ...getLast100Messages, messageCreated ] } }); } } }); 

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ, рдЬрдм рдЗрд╕рдореЗрдВ рдореМрдЬреВрджрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪреИрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рд╕рдВрджреЗрд╢ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдмрдирд╛ рджреЗрдВрдЧреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХреЛрдб рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 const scrollEl = useRef(null); тАж <Content ref={scrollEl} onContentSizeChange={() => { scrollEl.current.wrappedInstance.scrollToEnd({ animated: true }); }} > 

рдЕрдм, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдпрд╛ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЪреИрдЯ рдмрд╣реБрдд рд╣реА рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдЧрд╛ред

рдмрд╛рдХреА рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рди рд╣реИ, рдЖрд╡реЗрджрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдЖрд╡реЗрджрди рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреА рд╕рдВрдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдПрдореБрд▓реЗрдЯрд░ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЫрд╡рд┐

Source: https://habr.com/ru/post/hi471712/


All Articles