ããã«ã¡ã¯ããã®æ©èœãã«ãã«åå ã§ããã°å¹žãã§ãã ä»åã®ãããžã§ã¯ãã§æ¬åœã«å¿ èŠã ããã§ãã ããããå§ããã«ã¯ããã€ãã®ãã³ããå¿ èŠã§ãã 誰ãã¢ã€ãã¢ã¯ãããŸããïŒ
å žåçãªãŠãŒã¹ã±ãŒã¹ãšããŠäœãèããŸããïŒ
ãªãã©ã€ã³ã¢ããªãšããŠïŒ
ç§ã¯ããããã®ããã«äœ¿ãããŠãããšæ³åããŸãïŒ
import { NetInfo } from 'react-native';
import OfflineLink from 'apollo-link-offline';
const offlineLink = new OfflineLink({
isOnlineAsync: () => NetInfo.isConnected.fetch(),
});
NetInfo.isConnected.addEventListener('change', (isConnected) => {
if (isConnected) {
offlineLink.resubmit();
}
});
ããã¯çŽ æŽãããæ©èœã ãšæããŸãã ç§ããããæœåšçã«èµ·ãã£ãŠãããšæãæ¹æ³ã¯ããªãã©ã€ã³ã§äœ¿çšããå¿ èŠãããäžé£ã®ã¯ãšãªãšãã¥ãŒããŒã·ã§ã³ãApollo-link-offlineã«å®çŸ©ãããããšã§ãã
ããããå®çŸ©ããããšãã¢ããªã±ãŒã·ã§ã³ã®ããã¯ã°ã©ãŠã³ãã§ãã¯ãšãªãããã¹ãŠã®ããŒã¿ããã§ããããããããããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åã§ããŸãã ãã¥ãŒããŒã·ã§ã³ã®å Žåããªãã©ã€ã³ã§äœæãããããŒã¿ãä¿åã§ããããã«ãããŒã«ã«ã¹ãã¬ãŒãžã«äœæããããã¹ãŠã®ãã£ãŒã«ããå¿ èŠã«ãªããŸãã
ãã®ããã«ããŠãããŒã¿ãããŒã«ã«ãã£ãã·ã¥ã«ä¿åããªããããªãã©ã€ã³ã§ãæ©èœãå®è¡ã§ããŸãã
Service Workerã«ãªã³ã¯ã§ããã°ãGoogleã®PWAãã¹ãã«ãåæ ŒããŸãã
ãã®åŸãã¢ããªããªã³ã©ã€ã³ã«æ»ããšãããŒã«ã«ãã£ãã·ã¥ã§çºçãããã¹ãŠã®ãã¥ãŒããŒã·ã§ã³ãAPIã«æ»ãããšãã§ããŸãã
æããã«ãäœããã®åœ¢ã®åæå®è¡ä¿è·ãå®æœããå¿ èŠããããŸãã
ç§ã®å¿é ã¯ããŠãŒã¶ãŒAïŒãªãã©ã€ã³ïŒãããŒãã«XãæŽæ°ãããŠãŒã¶ãŒBïŒãªã³ã©ã€ã³ïŒããŠãŒã¶ãŒAããªãã©ã€ã³ã®ãšãã«ããŒãã«XãæŽæ°ããããšã§ãã ããã§ã¯ãäœããã®åœ¢åŒã®åæå®è¡ã«ãŒã«ãå¿ èŠã«ãªããŸãã æ¥ä»é§ååã§ããå¯èœæ§ããããšæããŸããããŠãŒã¶ãŒBãæ°ä»ããªããã¡ã«ãŠãŒã¶ãŒAããŠãŒã¶ãŒBã®ããŒã¿ãäžæžãããå Žåãåé¡ã¯è§£æ±ºããŸããã
ãŸãã¯ããã¥ãŒããŒã·ã§ã³ã«å€±æããŠããªã³ã©ã€ã³ã«æ»ã£ããšãã«ãŠãŒã¶ãŒã«æåã§æŽæ°ãããããšãã§ããŸãã
Apollo Client 2ã¯çŽ æŽãããã§ããããã®æ©èœã¯çµ¶å¯Ÿçãªç¬ã®å€§éšãã«ãªããŸã
ç§ãããã倧奜ãã§ãã 1.0ã®Reduxã¹ãã¢ã§ããã«åãçµãããã®ããŸããŸãªè©Šã¿ããã£ãããšã¯ç¥ã£ãŠããŸãããäžè²«ããã¢ãããŒãã§Apollo2.0ãšã³ã·ã¹ãã ã®å®å šãªåžæ°ã«ããããšã¯éåžžã«çŽ æŽãããããšã§ãã
ããã§åãäžããå 容ã®ã»ãšãã©ã¯ããã§ã«ç§ã«ã¯éåžžã«çã«ããªã£ãŠããŸããåºæ¬çã«ã¯ãããŒã¿ãããŒã«ã«ã¹ãã¬ãŒãžã«æ°žç¶åããäºåŸã«ããããApolloã«ã€ã³ã¯ããããšæããŸãã 第äºã«ãçªç¶å€ç°ããã¥ãŒã«å ¥ããããšã
äžçš®ã®ç¬¬3ã®ç®æšãšããŠãããã¯ã°ã©ãŠã³ãã§ããã«å€ãã®ããŒã¿ãåžã蟌ããããšãçŽ æŽãããããšã§ãããç§ãé¢ä¿ãªããããããšæã£ãŠããããšã§ãã ç§ã¯å®éã«ã¯ããŠãŒã¶ãŒã®ããŒã¿ã®ã»ãŒãã¹ãŠãããŒã«ã«ã«ãä¿åããŠãäžè¬çãªã¯ãšãªæäœãã¯ããã«é«éåãããããã¯ãŒã¯ãèš±å¯ããŠå®å šãªç²ŸåºŠã§åæ°ŽåããããšèããŠããŸãã ã§ããããç¹ã«Service WorkerãSafariã§ããããæè¡ãã¬ãã¥ãŒã«ç»å Žããããšã§å®è¡å¯èœã«ãªãå§ããŠããã®ã§ããã®ç±å¿ãªåŸã®è² è·ã®è§åºŠã«å¯Ÿããããçš®ã®è§£æ±ºçã¯çŽ æŽãããã§ãããã
ç§ãããã«è奮ããŠããŸãã @danieljvdm apollo-clientãªããžããªã®åé¡ã§ãæ°žç¶æ§ã«ã€ããŠå°ãæå©ãªã¹ã¿ãŒããåããŸããã
RetryLinkã¯ãããã¯ãŒã¯ãšã©ãŒãšåè©Šè¡ã®ç®¡çã«åœ¹ç«ã€ãšæããŸããã redux-offlineã®ãããªããçš®ã®ãã©ãŒã«ãªããèŠãããšæããŸãã
ããã¯ããªãã¯ãŒã«ã§ãã @ 2WheelCoderãåç §ããåé¡ã¯ãå®å šãªãªãã©ã€ã³ãµããŒãïŒãã¥ãŒã€ã³ã°ã¯ãšãª/ãã¥ãŒ
ããã§ããéå§ããŠãã®äžã«æ§ç¯ããã®ã«é©åãªå Žæã§ããå¯èœæ§ããããŸãã ãã®åé¡ã§ç§ãææããã®ã¯ãçŸåšããã£ãã·ã¥ã®å€æŽãç£èŠããè¯ãæ¹æ³ããªããšããããšã§ãã ç§ã¯å®éã«ä»æ¥ã®åãã«@ 2WheelCoderã®æåã®ææ¡ãå®è£ ããããšããŸããããåæ§ã®åé¡ã«ééããŸããã ãã¹ãã¢ã®å€æŽãç£èŠãããããã®ApolloLinkã®äœæã«é¢ããåé¡ã¯ãã¯ã©ã€ã¢ã³ãã¢ã¯ã·ã§ã³ãšãã®åŸã®ãã£ãã·ã¥æžã蟌ã¿ã®éã®ã³ã³ããã¹ãã§ã®ã¿ååšããããšã§ãã ãããã£ãŠããªã¯ãšã¹ããéä¿¡ãããåã«ã€ã³ã¿ãŒã»ãããïŒããã«ãŠã§ã¢ïŒããã£ãã·ã¥ã«æžã蟌ãŸããåã«ã€ã³ã¿ãŒã»ããããããšãã§ããŸãïŒã¢ãã¿ãŒãŠã§ã¢ïŒãããã€æžã蟌ãŸãããã¯ããããŸãã-æšæž¬ããããšããã§ããŸããïŒçŸåšã®ããã¯ã¯1000ããªç§ã®ã¿ã€ã ã¢ãŠãã§ãïŒ ïŒã
ãªãã©ã€ã³æ°žç¶æ§ã«ãªã³ã¯ã䜿çšããå Žåã®ãã1ã€ã®èŽåœçãªæ¬ é¥ã¯ããµãã¹ã¯ãªãã·ã§ã³ãèæ ®ãããªãããšã§ãã ãµãã¹ã¯ãªãã·ã§ã³ãªã³ã¯ã¯ããµãã¹ã¯ãªãã·ã§ã³ãéããããšãã«ã®ã¿èµ·åããåŸç¶ã®ã€ãã³ãã§ã¯èµ·åããŸããïŒãããè¡ãæ¹æ³ããªãã®ã§ããããïŒïŒã
ããã¯åºæ¬çã«ç§ãä»ãããšããã§ãããããŠç§ã¯ããªãç«ã¡åŸçããŠããŸã-ç§ã¯ããã«ååŸããããã«ç§ã¯apollo-cache-inmemoryãžã®PRãéããªããã°ãªããªããããããªããšæããŸãã
@danieljvdmç§ã¯åãå Žæã«ããŸããåãåé¡ãçºçããåŸããã£ãã·ã¥ã§çŽæ¥æ°žç¶æ§ãåŠçããããšã¯çã«ããªã£ãŠãããšæããŸãã ãªãã¶ãŒããã«ã¯ãªã¯ãšã¹ãã®åŸãïŒéåžžã¯ïŒãã£ãã·ã¥ãæŽæ°ãããåã«å®äºãããããHttpLinkã¯ããã«é©ããŠããŸããã
apollo-cache-inmemoryã§PRãéã䟡å€ããããããããŸãããããããæ°ãããããžã§ã¯ãã«ãã©ãŒã¯ããæ¹ãããã®ã§ã¯ãªãããšæããŸãã ãã£ãã·ã¥ãšãªã³ã¯ã«é¢ããApollo2ã®ã¢ãžã¥ãŒã«æ§ã¯ãå¥ã®çš®é¡ã®ãã£ãã·ã¥ãå¿ èŠãªå Žåã¯ããããæ§ç¯ããã ãã§ããããšã瀺åããŠããããã§ãã ãã¶ããapollo-clientã®åé¡ã¯æ¬¡ã®ã¹ãããã§ãïŒapollo-cache-inmemoryã«ã¯ç¬èªã®ãªããžããªããããšã¯æããŸããïŒïŒ
ãã¡ãã®ãªã³ã¯ããå°ã話é¡ããå€ããŠããŸã£ãããšããè©«ã³ããŸãã
@holmanãµãã¡ãªããã¯ãã¬ãã¥ãŒã§ãµãŒãã¹ã¯ãŒã«ãŒã«ã€ããŠã®ãªãã¡ã¬ã³ã¹ããããŸããïŒ
@seduboisããã¯æè¡ãã¬ãã¥ãŒäžã§ããããŸã ãŸã ããªãã®ããšããããŸãã
@ 2WheelCoderæ°ãããã£ãã·ã¥ã®apolloã¯ã©ã€ã¢ã³ããžã®PRã®ã¢ã€ãã¢ã奜ãã§ãã ããããapollo-offline-cache
ã¯apollo-cache-inmemory
æ¡åŒµã§ããŸããïŒ ç§ã¯ããã«åãçµãã®ãåãã§æäŒããããšæããŸãã ããã§åé¡ãéãããã§ããïŒ
@ 2WheelCoder @danieljvdmæ°žç¶æ§ã®ããã«LocalForageã䜿çšããã®ã¯ã©ãã§ããhttps://github.com/localForage/localForageçãããPRãéããããç§ã¯åãã§æã貞ããŸã
@danieljvdmãããPRã
@EishpirateLocalForageãçŽ æŽãããããšã«ééããªãåæããŸãã redux-persistãã¹ãã¢ãä¿åããæ¹æ³ã¯ããªãå
å®ã§ãããããapollo-offline-cache
åŸãã¹ãé©åãªãã¿ãŒã³ãšããŠæ©èœã§ãããšæããŸãã
çãããç§ã¯reduxpersistããã±ãŒãžã䜿çšããŠã¹ãã¢ããŒã¿ãreactnativeAsyncStorageã«ä¿åããŠããŸãã ç§ã¯ä»ãããã©ã®ããã«è¡ãã®ã§ããïŒ äœãæ¡ãïŒ
@Eishpirate ïŒ https://github.com/localForage/localForage/wiki/Supported-Browsers-Platforms
apolloã®ãªãã©ã€ã³æ©èœãã¢ããªã§æ©èœããªãã®ã¯éåžžã«æ²ããããšã§ãã
@timLoewelããã¯éåžžã«è¯ãç¹ã§ãã ReactNativeã»ã©å ãèããŠããŸããã§ããã æ瀺çã«ãããªããšã¯æããªãã§ãã ããã
ããã«ãããä»åŸäºæããªãåé¡ãçºçããå¯èœæ§ããããŸãã è»èŒªã®åçºæãããã«å®è¡å¯èœãªä»£æ¿æ¡ããããã©ããã¯ããããŸããã
ãã®ãã£ã¹ã«ãã·ã§ã³ã«é¢é£ããå¯èœæ§ã®ããèå³æ·±ãèšäºhttps://blog.logrocket.com/building-an-offline-first-app-with-react-and-rxdb-e97a1fa64356?t=now
ãªãã©ã€ã³ããŒã¿ããŒã¹ãšããŠrxdbã䜿çšããããšã¯æ¬åœã«ææã«èŠããŸãã ããã¯ãReactãReact-NativeãVueãAngularãã»ãšãã©æã人æ°ã®ãããªãã·ã§ã³ãšäºææ§ããããŸãã
ããããç§ãèŠã€ããåé¡ã¯ãPouchDBïŒCouchDBã®æŽŸçç©ïŒã®ãããªnoSQLããŒã¿ããŒã¹ãšåæããå¿ èŠããããšããããšã§ãã ç§ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ããªã¬ãŒã·ã§ãã«SQLããŒã¿ããŒã¹ïŒPostgresïŒã䜿çšããŠããããã¹ãŠã®ããŒã¿æ€èšŒã¯ããŒã¿ããŒã¹ã¬ãã«ã§è¡ãããŸãã ãã®ã·ã¹ãã ã䜿çšããå¿ èŠãããå Žåã¯ãjsonschemaãä»ããŠæ€èšŒãç¶æããå¿ èŠããããŸãã
ããã¯DRYã®ååã«åŸãããééããªãåé¡ãåŒãèµ·ãããŸãã
ç§ãèŠã€ããããäžã€ã®éžæè¢ã¯Kintoããhttp://docs.kinto-storage.org/en/stable/index.htmlã®Postgresã§åäœããŸãã®ã§ãrxdbãå°å ¥ããããšã®è€éãã®äœåãªå±€ã®ããã€ããé¿ããã¹ãã§ãã Kintoã¯HTTPã䜿çšããŠãããããçè«çã«ã¯Apollo-link-httphttps ïŒ//github.com/apollographql/apollo-link/tree/master/packages/apollo-link-httpã«ãã©ã°ã€ã³ããã ãã§æžã¿
å€ãã®äœæ¥ããã£ãã·ã³ã°ã«é¢é£ããŠããããã«æãããŸãã
reduxã¯ã©ãã§ããïŒ ïŒç§ã¯çå£ã§ãïŒ
apollo-offlineäœæ¥ã«åºã¥ãapollo-link-offlineããã±ãŒãžãš...
apollo-cache-reduxããã±ãŒãžã apollo-offlineãšåãããã«ãredux-offline / redux-persistã䜿çšããŸãã
Apolloã¯ãããã©ã«ãã®æ±çšãœãªã¥ãŒã·ã§ã³ãšããŠinmemory-cacheãäœæããŸãã-ãªã圌ããå¥ã®ã©ã€ãã©ãªãšããã»ã©å¯æ¥ã«çµã³ä»ããããããªãã®ãç解ã§ããŸãã ããããredux / redux-offline / redux-persisãœãªã¥ãŒã·ã§ã³ã¯éåžžã«ãã¹ãæžã¿ã§ã...ããã§ããåªããéžæè¢ã§ãã éçºã¯3ã€ãã¹ãŠã§éåžžã«æŽ»çºã§ãã
ç·šéïŒ@rportugalã®ãããã§ã apollo-cache-reduxãååšããããã«ãªããŸãã
@giautmå°ãåã«ç§ã®å°ããªãããžã§ã¯ãã«ã€ããŠããªãã説æããããšãã»ãŒæ£ç¢ºã«å®è£ ãããããæ¬åœã«åçŽãªããã±ãŒãžãšããŠå ¬éããããšã«ããŸããïŒ apollo-link-queue ã æ¹åã®ã¢ã€ãã¢ãããã°ãææ¡ãè²¢ç®ããé¡ãããŸãã
ãã®åé¡ã®ç¶æ ãæããŠãã ããã Apolloããã®ãã®ã§ãReduxãªãã©ã€ã³ãšã¯é¢ä¿ã®ãªããªãã©ã€ã³ã®ãã®ã«äœ¿çšã§ãããã®ã¯ãããŸããïŒ
@smithaitufe ã
ã¯ãã apollo-cache-persistã䜿çšã§ããŸãã
@ Gregor1971
ãã®åç
§ãããããšãã ç§ã¯ãããè©ŠããŠã¿ãŠãç§ã®èŠ³å¯ãæåºããŸãã
è¡šé¢çã«ã¯ãã¯ãŒã«ã§å®è£
ãç°¡åã«èŠããŸãã
ããã¯apollo-link-queueãšã©ã®ããã«ç°ãªã
çãããç§ã¯apollo-offlineãšåæ§ã®åäœãããreact-nativeã®åºæ¬çãªå®è£
ããŸãšããããšããŸããã
ïŒhttps://github.com/Malpaux/apollo-offline/issues/14ã«pingãéä¿¡ïŒ
ããªãã¯ãã®èŠç¹ã§ããããã§ãã¯ããããšãã§ããŸãïŒ //gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
ããã¯æ¬¡ã®çµã¿åããã§ãïŒ
optimisticFetchLink
é¢æ°ãããã€ã¹ããªãã©ã€ã³ã«ãªããšããªã¯ãšã¹ãã¯ãã¥ãŒã«å
¥ãããããªã³ã©ã€ã³ã«æ»ããšãã¥ãŒããå€ãããŸãã ïŒ apollo-link-queue
ïŒ
ãããã¯ãŒã¯ãšã©ãŒã§å€±æãããªã¯ãšã¹ãã¯ãã¹ãŠåè©Šè¡ãããŸãïŒçŸåšã¯ç¡éã«ïŒã ïŒ apollo-link-retry
ïŒ
ããã¯ãããã€ã¹ããªãã©ã€ã³ã§ããããããã¯ãšã³ãã«å°éã§ããªãïŒããšãã°ãããã€ã¹ãããŠã³ããŠããå ŽåïŒããšãåå ã§ããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
ãã ãããã£ãã·ã¥ããã¯ãšãªã解決ã§ããå Žåã¯ãåè©Šè¡ãããã代ããã«ãã£ãã·ã¥å
ã®ããŒã¿ãå¿çãšããŠäœ¿çšãããŸãã ããã¯optimisticFetchLink
é¢æ°ã§å®è£
ãããŸãã
ç§ã®æèŠã§ã¯ããã®ã楜芳çãªãã§ãããåäœã¯apollo-offlineã®æãéèŠãªéšåã®1ã€ã§ãããå°æ¥ã®apollo-link-offline
å®è£
ã¯ããããµããŒãããå¿
èŠããããŸãã ããã«ããããŠãŒã¶ãŒã¯ãããŒã¿ããã§ãããããŠæ°žç¶åãããŠããéãããªãã©ã€ã³ã§ãéåžžã©ããã¢ããªã䜿çšã§ããŸãã ç§ã®æèŠã§ã¯ãããã¯network-and-cache
ãã§ããããªã·ãŒã®ããã©ã«ãã®åäœã§ããã¯ãã§ãããæ®å¿µãªããããããããã«å€æŽãããããã«ã¯èŠããŸããïŒhttps://github.com/apollographql/react-apollo/issues/ãåç
§ïŒ 604ïŒissuecomment-355648596ïŒã
èŠæšãofflineLink.js
ãšããŠä¿åãããšã次ã®ããã«äœ¿çšã§ããŸãã
import { InMemoryCache } from 'apollo-cache-inmemory'
import { ApolloClient } from 'apollo-client'
import { createHttpLink } from 'apollo-link-http'
// get this from https://gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
import { createOfflineLink } from './offlineLink'
const cache = new InMemoryCache()
const networkLink = createHttpLink()
const offlineLink = createOfflineLink({ cache })
const link = ApolloLink.from([
// ... + other links ...
offlineLink,
networkLink,
])
const client = new ApolloClient({
cache,
link,
}
isOnline
ãã§ãã¯ãæœè±¡åããå¿
èŠããããŸãã{__online_: true}
ã¯ãšãªå€æ°ã®èšå®ïŒã®å€§ãã¡ã³ã§ã¯ãããŸãããããããè¡ãã«ã¯ééããªãäœããã®æ¹æ³ãããã¯ãã§ããããã«é¢ãã解決çãæ¢ããŠãã人ã¯èª°ã§ããããè©ŠããŠããã ããã°å¹žãã§ããããããã°ããããã¿ã€ãã³ã°ããã¹ããããã¥ã¡ã³ããªã©ãåããé©åãªnpmã¢ãžã¥ãŒã«ã«å€ããããšãã§ããŸãã ãã®æ¯ãèãã¯ç§ã®æèŠã§ã¯éåžžã«éèŠã§ãããapollo-client2ããŸã ããã«å¯Ÿããé©åãªè§£æ±ºçãæã£ãŠããªãã®ã¯æ¬åœã«æ®å¿µã§ãã
ãããâïž
@smithaitufe ã
ããã¯apollo-link-queueãšã©ãéãã®ã§ããïŒ
apollo-link-queueã¯ãæ¥ç¶ã¹ããŒã¿ã¹ã«åºã¥ããŠã€ã³ããªãžã§ã³ããªåŠçãå®è¡ããŠããããã«èŠããŸãã apollo-cache-persistã¯ãã£ãã·ã¥ãä¿åããŸãã ããšãã°ããŠãŒã¶ãŒãæ¥ç¶ãåæããç¶æ ã§ã¢ããªãèµ·åããŠå®è¡ã§ããããã«ããŸãã ãã£ãã·ã¥ãæ°žç¶åããªããšãã¢ããªãèµ·åããããã«æ¥ç¶ãå¿ èŠã«ãªããŸãã
äžèšã®@lachenmayerã®ãœãªã¥ãŒã·ã§ã³ïŒapollo-link-queueã䜿çšïŒãšæ°žç¶çãªãã£ãã·ã¥ã®äž¡æ¹ããŸãã¯ããã«è¯ãæ¹æ³ãå¿ èŠã«ãªãå¯èœæ§ããããŸãã ïŒç§ãã¡ã¯ãªã³ã¯ãªããžããªã§ãã£ããããŠããã®ã§ãããã§ã®çŠç¹ã®ã»ãšãã©ã¯ããã«ãããŸãïŒ
@lachenmayeräžèŠãããšãããªãã®ã¢ãããŒãã¯éåžžã«é åçã«èŠããŸãã
apollo-offline
ã®æ¥œèŠ³çãªãã§ããæ©èœã®ãããªãã®ã®å¿
èŠæ§ã«ã€ããŠç§ã¯ããªãã«çµ¶å¯Ÿã«åæããŸãã ããïŒãŸãã¯ãããããã®æ¬ åŠïŒã¯ãäž»ã«ç§ãapollo-offline
ãå§ãããã£ãããšãªã£ããã®
ç§èªèº«ã apollo-offline
ã§æ¥œèŠ³çãªãã§ããæ©èœãéžæçã«æå¹/ç¡å¹ã«ããæ¹æ³ãå®è£
ããæ¹æ³ã«å®å
šã«æºè¶³ããŠããŸããã ã¯ãšãªå€æ°ã¯æåã®éžæè¢ã§ã¯ãããŸããã§ããããæãå®çšçãªãã®ã®ããã§ããã äœãææ¡ããŸããïŒ
次ã®æ°é±éã¯ç§ã«ãšã£ãŠããªãã¹ãã¬ã¹ã«ãªãã§ãããã ãã®åŸãApolloã®ææ°ã®ãªãã©ã€ã³ãã¡ãŒã¹ããœãªã¥ãŒã·ã§ã³ã®å®è£
ã«è²¢ç®ã§ããã°å¹žãã§ããããã¯ã apollo-offline
ããã±ãŒãžã®æ°ããããŒãžã§ã³ãapollo-link-offline
ãããªãã®ãããããŸããã
ããããšã@MLPXBrachmannïŒ
楜芳çãªãã§ããã¯fetchPolicy
ã䜿çšããŠå¶åŸ¡ããå¿
èŠããããšæããŸãããã£ãã·ã¥ããäœãååŸããããªãå Žåã¯ã network-only
ã䜿çšã§ããã¯ãã§ãã
@lachenmayer @MLPXBrachmann
ç§ã¯æºåãã§ããŠãããè²¢ç®ããçšæããããŸãã
ç§ãApolloã¢ããªã§ãªãã©ã€ã³åäœãå®è£ ããããã®ãªãã·ã§ã³ãæ¢ããŠããŸãã @lachenmayerããã®ã¢ãããŒãã¯ããŒã·ã§ã³ã¯æ°žç¶åãããªããããããŒãžãæŽæ°ããããšããµãŒããŒã«ã³ããããããŠããªãããŒã¿ã¯æ¬¡ã®ããã«ãªããŸããç Žæ£ãããŸããïŒã¢ããªãäžæåæ¢ãããŠããå Žåãreact-nativeã§ãåãããšã ãšæããŸãïŒã ãã®åŽé¢ã«ã€ããŠäœãä»äºãå°ãªããšãè°è«ã¯ãããŸããïŒ
@nicocrmãªãã»ã©...çŸæç¹ã§ã¯ããªãã©ã€ã³ãµããŒãã«é¢ããè°è«ã¯äž»ã«ãã®åé¡ã«ãããŸãã çŸåšãã¢ããèªäœã«ã¯ä»ã®åªå
äºé
ããããšæãã®ã§ãã³ãã¥ããã£ãããžã§ã¯ãapollo-link-offline
ãäœæããå¿
èŠããããŸãã ããã«ãããä»ãããå€ãã®è°è«ãšé²æ©ãããããããããšãé¡ã£ãŠããŸãð
@benseitzç§ã¯ééããªãããã«è³æã§ãã ãã®æ©èœã«ã¯å€ãã®é¢å¿ãå¯ããããŠãããããã³ãã¥ããã£ãããžã§ã¯ãã®äœå°ããããšç¢ºä¿¡ããŠããŸããæ¢åã®åãçµã¿ãè€è£œãããæçåãããããªãéããæ°ããããŒã ãäœæããŠapollo-link-offlineã®ãªããžããªãäœæããé¢å¿ã®ãããã¹ãŠã®äººãæåŸ ã§ããŸãã ã ç§ã¯å人çãªèå³ãæã£ãŠããã ãã§ãªããã¯ã©ã€ã¢ã³ãããã®æ©èœãæ¬åœã«æ±ããŠããã®ã§ããããçããã®ã«æ°æéããããŸãã apollo-offlineãªããžããªã§ãçµéšãè±å¯ãªãããäž»å°æš©ãæ¡ããããã©ãããå°ããŸãã
ç§ãééããªãããã«å人çãªèå³ãæã£ãŠããŸã-ãã®@nicocrmã§ããªããšããã«ãã£ããã§ããã°å¹žãã§ãã ãããŸã§ã®ãšãããreact-nativeã§ãªã¯ãšã¹ãã倱ãããããšã«æ°ã¥ããŠããŸããããããããã¹ãŠãé©åã«ãã¹ãããŠããŸããïŒãããŸã§ã®ã¯ãšãªã§ã®ã¿ããã¹ãŠãæ£åžžã«å®è¡ã§ããããã§ãïŒã
ãã®ããã®ã¬ããéå§ããã®ã¯çã«ããªã£ãŠãããšæããŸãã äžèšã®apollo-offline
äœæããapollo-offline
æ¹åã«è²»ããæéããªãããã apollo-link-offline
ãšåŒã¶ã®ãæãçã«ããªã£ãŠãããšæããŸãã
apollo-offline
ããåå©çšã§ããã³ãŒãã¯ãéåžžã«reduxåºæã§ããããããªããšæããŸãã
@nicocrmç§ã¯ããªãã«éåžžã«åæããŸãã ãã¥ãŒã«å
¥ããããã¯ãšãª/ãã¥ãŒããŒã·ã§ã³ãæ°žç¶åããããšã¯ãæœåšçãªapollo-link-offline
ãåŠçãããã®ã§ããããšã¯ééããããŸããã
@benseitzç§ããã³ãã¥ããã£ã®åãçµã¿ãšããŠapollo-link-offline
ãéå§ããã®ã¯çŽ æŽãããèãã§ããããã®éçºã«åå ããããšæã£ãŠããŸãã
@lachenmayerããªãã¯çµ¶å¯Ÿã«æ£ããã§ãã apollo-offline
ãšèšç»ãããapollo-link-offline
ããã±ãŒãžã«ãã£ãŠå
±æãããã³ãŒãã®éã¯ããããã»ãšãã©ãªãã§ãããã ãã ããåè
ã®åºæ¬çãªæŠå¿µã®å€ãã¯ãApollo2.0ãŠãããŒã¹ã§ãªãã©ã€ã³ããŒã«ãããã»ãããéçºãããšãã«ãåœãŠã¯ãŸããšæããŸãã
ãããã«ããã apollo-link-offline
ã¢ã€ãã¢ã«ã€ããŠè©±ãåããå®è£
ã«é¢ãããã£ãŒãããã¯ãæäŸããã¹ã±ãžã¥ãŒã«ãå°ã解æŸããããããã«ãããã€ãã®ã³ãŒããæäŸããããšæããŸãã
@MLPXBrachmann @lachenmayer @nicocrmããã¯ããããããã®æ£ããæ¹æ³ã®ããã«èãããŸãïŒ
誰ã§ãApolloSlackã§å
¬éãã£ã³ãã«ãéãããšãã§ããã®ã§ã apollo-link-offline
ãšããååã®ãã¡ã€ã«ãéãããšããå§ãããŸãã ãã¶ããããã¯ç§ãã¡ã®éã®ã³ãã¥ãã±ãŒã·ã§ã³ãå°ãç°¡åã«ããŸãã éèŠãªæ±ºå®ã¯ãã¹ãŠãGitHubã®åé¡ã«ææžåããå¿
èŠããããŸãã
ã¬ããšã¹ã©ãã¯ã®äž¡æ¹ã®ãã£ãã«ãéããŠã倧äžå€«ã§ããããããšãã©ã¡ãããããããã§ããïŒ
確ãã«ãããããšãïŒ
å
±åäœæ¥è
ãšããŠ3人ããªããžããªã«è¿œå ããŸããã ãããŠã Apollo Slackã®#apollo-link-offline
ãã£ã³ãã«ã«åå ã§ããŸã
ãã¡ããã誰ããGitHubãªããžããªã§å
±åäœæ¥ããSlackã«ã€ããŠè©±ãåãããã«æåŸ
ãããŠããŸã:)
ãšãŠãè奮ããŠããŸãð¯
Googleæ€çŽ¢ããããã«ã¢ã¯ã»ã¹ããæ¹ã®ããã«ãApollo Client2.0ã§çŸåšå©çšå¯èœãªãã¹ãŠã®æ¢åã®ãªãã©ã€ã³ãã¯ãããžãŒã®æŠèŠããŸãšããŸããã
https://github.com/benseitz/apollo-link-offline/issues/1#issuecomment -371678922
Apolloã¯AWSAppSyncãšåçã®ãã®ã«åãçµãã§ããŸããïŒ ãã§ã«GraphQLãµãŒããŒããããAWSãœãªã¥ãŒã·ã§ã³ïŒã€ãŸããLamdaãDynamoDBãElastic SearchïŒã§ã¯ãªãããµãŒããŒã䜿çšããã¯ãšãªãšãã¥ãŒããŒã·ã§ã³ã®ããã®ãªãã©ã€ã³ã¯ã©ã€ã¢ã³ããã£ãã·ã¥ãå¿ èŠã§ãã
ãããæ©èœããããšãé¡ã£ãŠããŸãã
@masullããã¯çµ¶å¯Ÿã«çŽ æŽãããã§ãããã Firebaseã解æãã©ãããã©ãŒã ãæ©èœãããšã¯æããªãã£ãã®ã§ããã®æ©èœã䜿çšãããšãã°ãããã§ãããã
ããããã®ããã±ãŒãžã§ãã¹ãŠãã»ããã¢ããããã®ã«èŠåŽããŠããŸã...ãŸã£ããé¢çœããããŸãã:)
æãåèã«ãªãã³ã¡ã³ã
çãããç§ã¯apollo-offlineãšåæ§ã®åäœãããreact-nativeã®åºæ¬çãªå®è£ ããŸãšããããšããŸããã
ïŒhttps://github.com/Malpaux/apollo-offline/issues/14ã«pingãéä¿¡ïŒ
ããªãã¯ãã®èŠç¹ã§ããããã§ãã¯ããããšãã§ããŸãïŒ //gist.github.com/lachenmayer/2e364a5ca9ae0918eb032867d0c6720d
ããã¯æ¬¡ã®çµã¿åããã§ãïŒ
optimisticFetchLink
é¢æ°ãããã€ã¹ããªãã©ã€ã³ã«ãªããšããªã¯ãšã¹ãã¯ãã¥ãŒã«å ¥ãããããªã³ã©ã€ã³ã«æ»ããšãã¥ãŒããå€ãããŸãã ïŒ
apollo-link-queue
ïŒãããã¯ãŒã¯ãšã©ãŒã§å€±æãããªã¯ãšã¹ãã¯ãã¹ãŠåè©Šè¡ãããŸãïŒçŸåšã¯ç¡éã«ïŒã ïŒ
apollo-link-retry
ïŒããã¯ãããã€ã¹ããªãã©ã€ã³ã§ããããããã¯ãšã³ãã«å°éã§ããªãïŒããšãã°ãããã€ã¹ãããŠã³ããŠããå ŽåïŒããšãåå ã§ããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
ãã ãããã£ãã·ã¥ããã¯ãšãªã解決ã§ããå Žåã¯ãåè©Šè¡ãããã代ããã«ãã£ãã·ã¥å ã®ããŒã¿ãå¿çãšããŠäœ¿çšãããŸãã ããã¯
optimisticFetchLink
é¢æ°ã§å®è£ ãããŸããç§ã®æèŠã§ã¯ããã®ã楜芳çãªãã§ãããåäœã¯apollo-offlineã®æãéèŠãªéšåã®1ã€ã§ãããå°æ¥ã®
apollo-link-offline
å®è£ ã¯ããããµããŒãããå¿ èŠããããŸãã ããã«ããããŠãŒã¶ãŒã¯ãããŒã¿ããã§ãããããŠæ°žç¶åãããŠããéãããªãã©ã€ã³ã§ãéåžžã©ããã¢ããªã䜿çšã§ããŸãã ç§ã®æèŠã§ã¯ãããã¯network-and-cache
ãã§ããããªã·ãŒã®ããã©ã«ãã®åäœã§ããã¯ãã§ãããæ®å¿µãªããããããããã«å€æŽãããããã«ã¯èŠããŸããïŒhttps://github.com/apollographql/react-apollo/issues/ãåç §ïŒ 604ïŒissuecomment-355648596ïŒãèŠæšã
offlineLink.js
ãšããŠä¿åãããšã次ã®ããã«äœ¿çšã§ããŸããæ¢ç¥ã®åé¡/äžè¶³ããŠããããã
isOnline
ãã§ãã¯ãæœè±¡åããå¿ èŠããããŸãã{__online_: true}
ã¯ãšãªå€æ°ã®èšå®ïŒã®å€§ãã¡ã³ã§ã¯ãããŸãããããããè¡ãã«ã¯ééããªãäœããã®æ¹æ³ãããã¯ãã§ããããã«é¢ãã解決çãæ¢ããŠãã人ã¯èª°ã§ããããè©ŠããŠããã ããã°å¹žãã§ããããããã°ããããã¿ã€ãã³ã°ããã¹ããããã¥ã¡ã³ããªã©ãåããé©åãªnpmã¢ãžã¥ãŒã«ã«å€ããããšãã§ããŸãã ãã®æ¯ãèãã¯ç§ã®æèŠã§ã¯éåžžã«éèŠã§ãããapollo-client2ããŸã ããã«å¯Ÿããé©åãªè§£æ±ºçãæã£ãŠããªãã®ã¯æ¬åœã«æ®å¿µã§ãã
ãããâïž