Next.js: مثال أبولو الأدنى

تم إنشاؤها على ١٣ ديسمبر ٢٠١٦  ·  60تعليقات  ·  مصدر: vercel/next.js

اتضح أن تكامل أبولو أسهل كثيرًا عند استخدام عميل أبولو مباشرةً بدلاً من رد فعل أبولو.

ها هو الكود: https://github.com/nmaro/apollo-next-example
وإليك إصدار قيد التشغيل (على الأقل طالما احتفظ بخادم الرسم البياني على الإنترنت): https://apollo-next-example-oslkzaynhp.now.sh

التفاصيل ذات الصلة هنا:

apollo.js

import ApolloClient, {createNetworkInterface} from 'apollo-client'

export default new ApolloClient({
  networkInterface: createNetworkInterface({
    uri: GRAPHQL_URL
  })
})

ثم في الصفحة

import React from 'react'
import gql from 'graphql-tag'
import 'isomorphic-fetch'
import apollo from '../apollo'
import Link from 'next/link'

const query = gql`query {
  posts {
    _id
    title
  }
}`
export default class extends React.Component {
  static async getInitialProps({req}) {
    return await apollo.query({
      query,
    })
  }
  render() {
    ...
  }
}

التعليق الأكثر فائدة

يجب أن نحصل على منشور مدونة حول Apollo + Next.js على مدونة Apollo!

ال 60 كومينتر

بعض الملاحظات: لا يتعمق هذا النهج في المكونات لتحميل جميع استعلامات الرسم البياني التي يواجهها (شيء يمكنك تمكينه من جانب الخادم باستخدام رد فعل أبولو).

أعتقد أن هذا يمثل مشكلة بعض الشيء مع next.js: ليس من المفترض حقًا تحميل البيانات في عمق التسلسل الهرمي للمكونات - إذا كنت تريد أن يحدث ذلك على كل من العميل وعلى جانب الخادم. هناك نقطة واحدة فقط لتحميل البيانات: في getInitialProps في مكون الجذر. لا أعرف ما إذا كان هذا سيتغير في المستقبل ، ولكن إذا لم يكن الأمر كذلك ، فسنضطر إلى ذلك

  1. هندسة تطبيقاتنا حتى نتمكن من تحميل جميع البيانات ذات الصلة لصفحة من البداية ، أو
  2. جزء من البيانات الخاصة بالعميل فقط (أي كل شيء لا نقوم بتحميله في getInitialProps) ، باستخدام إستراتيجية مختلفة

في كلتا الحالتين ، يجب أن يكون الأسلوب أعلاه مناسبًا للبيانات التي يتم تحميلها في getInitialProps.

إذا أحب بعض المطورين الأساسيين ذلك ، يمكنني إنشاء طلب سحب باستخدام المثال.

حول getInitialProps التي يتم استدعاؤها عند الجذر فقط ، راجع https://github.com/zeit/next.js/issues/192. احب ان يكون لديك افكارك هناك

sedubois ما هي المشاكل التي كنت تواجهها مع react-apollo ؟

nmaro الخاص بك https://github.com/nmaro/apollo-next-example فارغ.

amccloud من الأفضل أن تسأل nmaro عن ذلك (ما زلت بحاجة للعودة إلى الكود).

شكرًا sedubois ، إنه متصل الآن (ننسى دائمًا تشغيل push origin master بدلاً من push فقط في المرة الأولى).

عفوًا ، لقد ذكرت للشخص الخطأ. nmaro ما المشكلة التي واجهتك مع رد فعل أبولو؟

تم تحميل البيانات في الخادم ، وبمجرد أن يبدأ العميل في تحميل الصفحة ، أصبحت فارغة مرة أخرى. ثم نظرت إلى تطبيقsedubois (https://github.com/RelateMind/relate) ، واعتقدت أنه معقد جدًا بالفعل لإثبات سريع للمفهوم ، لذلك حاولت أخيرًا استخدام المستوى الأدنى من واجهة برمجة التطبيقات.

stubailo نظرًا لأنك كنت تتساءل عن سبب صعوبة تكامل apollo مع next.js - يبدو أن المكان الوحيد الذي يمكنك جلب البيانات فيه سواء على العميل أو الخادم هو المكون الجذر للصفحة داخل وظيفة غير متزامنة تسمى getInitialProps. أعتقد أن الطريقة المعتادة لدمج رد فعل أبولو لن تكون مفيدة إلا من جانب العميل.

مثير للاهتمام - هل هناك أي عمليات تكامل أخرى للبيانات مع Next.js؟ يبدو أن استخدام Redux صعب جدًا استنادًا إلى الأمثلة التي رأيتها.

تحتوي معظم أنظمة البيانات الحديثة على نوع من ذاكرة التخزين المؤقت العالمية (Redux و Apollo و Relay) لذلك أشعر أنه يجب أن يكون هناك نوع من التسهيلات في Next لتمكين هذا.

كيف يمكننا جعل Next.js يلعب بشكل أفضل مع أنظمة البيانات الحديثة مع ذاكرة تخزين مؤقت عالمية (Redux ، Apollo ، Relay)؟ أشعر أن هذا يجب أن يكون أولوية كبيرة للإصدار القادم. تضمين التغريدة

إطلاقا. لدينا مثال على Redux على الويكي ، نحتاج إلى إنشاء المزيد مثل هؤلاء :)

إنه ليس شيئًا يتعين علينا القيام به على أساس الإصدار بالمناسبة. يمكننا فقط كتابة دروس ويكي في أي وقت.

راجع للشغل nmaro هذا المثال يبدو أنيقًا حقًا ، شكرًا للمساهمة. يمكننا أن نأخذ ذلك كقاعدة ونوسعها

أوه ، غريب - لم أدرك القضايا التي ينطوي عليها الأمر. nmaro ما هو رد فعل أبولو الذي يجعل الأمور صعبة؟ يبدو أنك يجب أن تكون قادرًا على اتباع مثال redux تمامًا تقريبًا ولكن افعل new ApolloClient حيث يستخدم هذا createStore ، واستخدم ApolloProvider بدلاً من Provider .

أحب العمل مع شخص ما لتقديم مثال بسيط. هذا هو مثالنا "hello world" لـ React ، سيكون من الرائع أن يكون لديك منفذ لـ Next.js: https://github.com/apollostack/frontpage-react-app

stubailo أحب العمل معك في مثال بسيط. لقد كنت أستخدم إطار Apollo المصغر العالمي ، Saturn ، لعدد من المشاريع وأود نقلها إلى Next.js + Apollo في النهاية :)

رائع - نعم ، فقط إجراء الحد الأدنى من التعديلات على تطبيق الصفحة الأولى لجعله يعمل على next.js بدلاً من create-reaction-app هو المفضل لدي. ثم يمكننا إدراجها على صفحتنا الرئيسية أيضًا!

تضمين التغريدة

كانت هناك مشكلة صغيرة تتمثل في أنه تم تحميل البيانات وعرضها على الخادم ، فقط ليتم استبدالها بأي شيء عند التحميل على العميل - أعتقد أنني لا أعرف أبولو وبعد ذلك بما يكفي للحصول عليها بشكل صحيح. باستخدام Apollo-client مباشرة ، لم أواجه هذه المشكلة.

الأمر الأكثر صعوبة لعرض الخادم هو وجود استعلامات أعمق في التسلسل الهرمي. لا تملك React طريقة لتصيير الأشياء بشكل غير متزامن ، أي انتظر حتى يصبح كل مكون جاهزًا قبل تقديمه. مما يعني أن إطار عمل SSR يجب أن يكون كذلك

  1. انتقل عبر شجرة المكونات بأكملها مرتين ، مرة لتحميل البيانات ، ومرة ​​لعرضها.
  2. توفير نقطة دخول غير متزامنة في الجذر - هذا هو نهج next.js مع getInitialProps

السؤال الآن هو ما إذا كان لدى Apollo طريقة لاكتشاف جميع استدعاءات البيانات التي ستكون مطلوبة لتقديم شجرة مكونة ، وفعل هذا كله في استدعاء دالة واحد يمكن توفيره لـ getInitialProps.

stubailo هل هناك حل لهذا؟ ^

nmaro @ ads1018 هل رأيت getDataFromTree ؟ كما هو مستخدم على سبيل المثال في المثال الخاص بي: https://github.com/RelateMind/relate/blob/master/hocs/apollo.js

راجع للشغل أتساءل عما إذا كان يمكن تبسيط الأمور الآن بعد دمج https://github.com/zeit/next.js/pull/301 . لم تنظر في ذلك بعد.

sedubois راجعت ذلك شكرا للمشاركة! نعم ، أتخيل أن مثالك باستخدام رد فعل أبولو يمكن تبسيطه باستخدام واجهة برمجة التطبيقات البرمجية الجديدة (# 301) التي تم دمجها للتو في Master حتى لا تضطر إلى لف جميع مكونات الصفحة باستخدام HOC الخاص بك. إذا أحرزت أي تقدم في ذلك ، فيرجى إبلاغي بذلك! سيكون من الرائع الحصول على مثال next.js على صفحة Apollo الرئيسية :)

NB @ ads1018 https://github.com/zeit/next.js/pull/301 يدور حول استخراج كود مشترك مع CommonsChunkPlugin ، وليس API البرمجي. لكن نعم ، ستساعد واجهة برمجة التطبيقات الآلية بالتأكيد أيضًا ، وتتطلع إلى إصدارها.

هل حظ أي شخص بأي حظ في الحصول على رد فعل أبولو مع الإصدار 2.0.0-beta.2 الجديد؟

seduboisstubailo لقد دفعت محاولتي في التالي + رد فعل أبولو إذا كنت تريد إلقاء نظرة. يمكنك العثور عليها هنا: https://github.com/ads1018/frontpage-next-app

إحدى المشكلات التي أواجهها الآن هي أن المكونات يتم تقديمها من جانب العميل فقط وليس جانب الخادم. ربما يمكننا استخدام طريقة رد فعل أبولو getDataFromTree داخل server.js؟ أو ربما داخل مخصصنا <document> ؟ نرحب بأي اقتراحات / طلبات سحب!

أرغب في تضمين مثال عالم الترحيب هذا في النهاية داخل مجلد الأمثلة التالية وصفحة Apollo الرئيسية.

الشرط المسبق الوحيد لعرض البيانات على الخادم هو أن يتم إرجاعها ككائن في getInitialProps ، ولا داعي للتخطي.

مسكتك. أعتقد أن هذا صعب بعض الشيء مع رد فعل أبولو لأنه كما أشار nmaro :

السؤال هو ما إذا كان لدى Apollo طريقة لاكتشاف جميع استدعاءات البيانات التي ستكون مطلوبة لتصيير شجرة مكون ، والقيام بهذا كله في استدعاء دالة واحد يمكن توفيره لـ getInitialProps.

مسكتك

@ ads1018 بعد قليل من البحث ، إذا تم الكشف عن مكون المستوى الأعلى في getInitialProps ، فيمكن بعد ذلك تحويله إلى سلسلة باستخدام مساعد Apollo .

عندئذٍ سيكون المستند _document شيئًا مثل:

export default class MyDocument extends Document {
  static async getInitialProps ({ app }) {
    const wrapped = React.createElement(ApolloProvider, { client }, app)
    const rendered = await renderToStringWithData(wrapped)
    return { html: rendered, initialState: client.store.getState() }
  }

  render () {

    return (
      <html>
        <Head>
          <title>My page</title>
        </Head>
        <body>
          <ApolloProvider client={client}>
            <Main />
          </ApolloProvider>
          <NextScript />
        </body>
      </html>
    )
  }
}

rauchg يبدو تغييرًا بسيطًا لفضح app بالإضافة إلى renderPage ، لكن هل هناك شيء أغفله؟

@ bs1180 آه الرائعة. هذا ما كنت أبحث عنه. نأمل أن يكون تغييرًا بسيطًا لفضح app . سيجعل التالي على الفور إطار عمل سهل الاستخدام من Graphql.

@ bs1180 لقد كشفت عن app داخل كائن الإرجاع renderPage . هل يتوافق هذا مع ما كنت تفكر فيه؟

@ ads1018 ليس تمامًا - في إصدارك render لا يزال يتم الاتصال به ، والذي سيكون تكرارًا غير ضروري إذا تم استدعاء renderToStringWithData يدويًا.

لقد بذلت مزيدًا من العمل على هذا ، وكانت النتيجة النهائية لي ليست جميلة كما تخيلت في البداية ، ويرجع ذلك أساسًا إلى أن التطبيق الرئيسي يتم عرضه كطفل لمكون <Main /> (في __next div) ، والذي ينفجر بعيدًا عن أي سياق يتم تمريره إلى التطبيق الخاص بك من الأعلى. لذلك لا يزال يحتاج إلى HOC لإضافة سياق Apollo مرة أخرى.

@ bs1180 فهمت. هل من الممكن تقديم <Main /> كطفل لـ ApolloProvider حتى نتمكن من تمرير السياق؟

لست متأكدًا مما تقصده ، لكنني أعتقد أنه الاتجاه الخاطئ. يمكن تحقيق SSR المثالي باستخدام HOC فقط - وهنا نسختي المرصوفة بالحصى كنقطة انطلاق:

export default (options = {}) => Component => class ApolloHOC extends React.Component {
  static async getInitialProps (ctx) {
    const user = process.browser ? getUserFromLocalStorage() : getUserFromCookie(ctx.req)
    const jwt = process.browser ? null : getJwtFromCookie(ctx.req)

    if (options.secure && !user) {
      return null // skip graphql queries completely if auth will fail
    }

    const client = initClient(jwt)
    const store = initStore(client)

   // This inserts the context so our queries will work properly during the getDataFromTree call,
   //  as well as ensuring that any components which are expecting the url work properly 
    const app = React.createElement(ApolloProvider, { client, store },
      React.createElement(Component, { url: { query: ctx.query }}))

 // this is the most important bit :)
    await getDataFromTree(app)

    const initialState = {[client.reduxRootKey]: {
      data: client.store.getState()[client.reduxRootKey].data
    }}

    return { initialState, user }
  }

  constructor (props) {
    super(props)
    this.client = initClient()
    this.store = initStore(this.client, this.props.initialState)
  }

  render () {
    return (
      <ApolloProvider client={this.client} store={this.store}>
          <Component url={this.props.url} />
      </ApolloProvider>
    ) 
  }
}

تم تصميم initClient و initStore على نموذج redux. تبدو كل صفحة بعد ذلك كما يلي:

import ApolloHOC from '../hoc'
import { graphql } from 'react-apollo'

export default ApolloHOC({ secure: false })(() => <b>Hello world</b>)

آمل أن يكون هذا مفيدًا - أرغب في معرفة ما إذا كانت هناك طرق أخرى للتحقيق ، أو شيء أتجاهله.

@ bs1180 رائع ، هذا شكر مفيد للغاية للمشاركة.

هل هناك أي شيء آخر يمكننا عرضه لصفحات بها بيانات رسم بياني داخل _document.js ؟ سيكون من الرائع لو تمكنا من تجاوز هذا المركز معًا كما اقترحت في البداية.

لا أعتقد ذلك - مما يمكنني رؤيته ، سيؤدي عرض جانب العميل إلى إزالة أي شيء يتم تمريره في السياق (سواء كان ذلك عميل Apollo أو متجر Redux القياسي أو السمات وما إلى ذلك) من _document.js المخصص. على الرغم من أنه يمكن نقل بعض منطق Apollo SSR إلى هناك ، إلا أن نوعًا من مكونات HOC / الغلاف سيظل ضروريًا لإضافة الكائنات الضرورية مرة أخرى إلى السياق.
قد يكون لدى شخص لديه معرفة أفضل بأجزاء next.js الداخلية فكرة أفضل.

حسنًا ، إذا تمكنت من الحصول على مثال عملي ، فأنا أحب التحقق من ذلك. ما زلت أكافح لجعل هذا يعمل.

لدي مثال عملي على React Apollo و Next 😄 🚀 آمل أن يجدها الكثير منكم مفيدًا. يمكنك التحقق من ذلك هنا: https://github.com/ads1018/next-apollo-example (لقد قمت أيضًا بنشر عرض توضيحي باستخدام الآن.)

انتهى بي الأمر باستخدام HOC داخل صفحتي المسماة withData() والتي تغلف الصفحة بـ ApolloProvider . لقد تم إيقاف تشغيلي في البداية باستخدام الموفرين على أساس كل صفحة بدلاً من مرة واحدة داخل ملف واحد ، لكنني كنت مقتنعًا من قبل بعض الأشخاص الأذكياء حقًا أنه أفضل لقابلية القراءة وقابلية التوسع. أعتقد في الواقع أن withData(MyComponent) يبدو لطيفًا للغاية ويوفر سياقًا جيدًا للقارئ (لا يقصد التورية) أن صفحة معينة تجلب البيانات.

شكرا @ bs1180 و rauchg لتوجيهي في الاتجاه الصحيح. إذا كنت ترغب في إضافة مثال with-apollo إلى الريبو ، فيرجى إبلاغي بذلك ويمكنني إنشاء طلب سحب.

شكرًا @ ads1018 😊 مقارنةً بمثالي https://Relate.now.sh ، هل يحل هذا المثال مشكلة استخدام Apollo في المكونات المتداخلة بشدة (تجنب سلسلة getInitialProps)؟ ربما يجب أن يوضح المثال ذلك لأنه نقطة الألم الرئيسية. وأنا متأكد من إضافة هذا إلى مجلد الأمثلة سيكون موضع تقدير كبير.

sedubois لا يمكنني إعادة إنتاج الخطأ الذي أشرت إليه في # 192. أنا أستخدم Apollo داخل المكونات المتداخلة دون أي مشاكل. إذا قمت بسحب المثال الخاص بي وتمكنت من إعادة إنتاجه ، فهل ستعلمني بذلك؟

شكرًا @ ads1018 ، تعمل الأشياء بشكل رائع مع الإصلاحات في https://github.com/ads1018/next-apollo-example/issues/2 🎉. لقد قمت بتحديث المثال الخاص بي أيضًا: https://github.com/RelateNow/relate

عمل جيد ، @ ads1018sedubois! لقد كنت أتابع هذا و # 192 ، لقد كنت أيضًا أقوم بالتحقيق في الجلب المسبق / طرق العرض غير المتزامنة باستخدام Apollo و Vanilla React.

هل لاحظت أو تتوقع أي مشكلات في الأداء عند تشغيل getDataFromTree قبل عرض كل صفحة؟ نظرًا لأن هذه الطريقة تعرض الشجرة بأكملها من الناحية الفنية بشكل متكرر ، وبعد ذلك عندما تعود getInitialProps ، تعيد React الشجرة مرة أخرى (وإن كان ذلك باستخدام بيانات من ذاكرة التخزين المؤقت).

حل رائع حقًا 👍 أعتقد أن العرض مرتين هو الخيار الوحيد لضمان تخزين جميع بيانات الطفل مؤقتًا ، ما عليك سوى فضول ما تفكر فيه يا رفاق بشأن الأداء.

مرحبًا estrattonbailey - لم ألاحظ أي مشكلات في الأداء ولا أتوقع أيًا منها. في الواقع ، إنه سريع للغاية! بالنسبة إلى تشغيل getDataFromTree ، فقد قمت بلف استدعاء الأسلوب هذا داخل شرطي يتحقق مما إذا كنا على الخادم بحيث لا يتم استدعاؤه إلا عندما يقوم المستخدم أولاً بتحميل التطبيق ويتم تجاوزه في جميع تغييرات المسار اللاحقة . يمكنك اللعب مع العرض التوضيحي إذا كنت تريد التحقق من الأداء. يرجى إعلامي إذا كان لديك أي ملاحظات!

@ ads1018 بعض الأفكار لمثالك:

  • تبسيط الحالة الأولية مثل هذا
  • افصل البرمجيات الوسيطة ، وقم بتخزينها ومخفضها في ملفات مثل هذه
  • تبسيط isServer إلى typeof window !== 'undefined' ، إسقاط !! ctx.req
  • استخرج قيمة IS_SERVER الثابتة إلى lib ، فلا داعي لتمريرها كمعلمة

@ ads1018 عظيم أن نسمع! عرض صغير لطيف.

ما قصدت أن أسأله هو: ما مدى جودة هذا المقياس؟ على الرغم من أنني لم أستخدم Next بعد ، كما أفهمها ، فإن Next يستدعي getInitialProps في كل انتقال للمسار ، إذا كان متاحًا في أحد مكونات الصفحة ، أي pages/page.js . على تطبيق / موقع ويب واسع النطاق به مئات العقد والكثير من البيانات الواردة ، أتخيل أن العرض مرتين على كل مسار يمكن أن يساهم في بعض وقت الاستجابة.

المشروع الذي أعمل عليه هو موقع تحريري واسع النطاق ، لذلك آمل أن أقوم ببعض المقارنة بين الأساليب المختلفة ، بما في ذلك أسلوبك. أود مناقشة المزيد على تويتر إذا كنت ترغب في ذلك. شكرا لعملكم!

تضمين التغريدة أتخيل أنه سيتوسع بشكل جيد للغاية. لتحميل الصفحة الأولي ، سيتم تنفيذ getInitialProps على الخادم فقط. أنت محق في أن getInitialProps سيتم تنفيذه مرة أخرى على العميل ولكن لن يتم طلب أي بيانات مرتين لأن getDataFromTree ملفوف داخل شرطي يتحقق مما إذا كنا على الخادم أم لا.

ملاحظة جانبية - إذا كنت قلقًا بشأن وقت تحميل الصفحة الأولي نظرًا لوجود الكثير من المكونات والبيانات التي يتم طلبها على الصفحة ، فيمكنك دائمًا إخبار Apollo بتخطي استفسارات محددة عن قصد أثناء SSR وإفراغها إلى العميل عن طريق تمرير ssr: false في خيارات استعلام أبولو.

سأتواصل معك على تويتر إذا كنت تريد المزيد من المناقشة :)

أنت محق في أنه سيتم تنفيذ getInitialProps مرة أخرى على العميل ولكن لن يتم طلب أي بيانات مرتين لأن getDataFromTree ملفوف داخل شرطي يتحقق مما إذا كنا على الخادم أم لا.

من المهم أن تضع في اعتبارك أن getInitialProps يتم تنفيذه من جانب العميل فقط عند الانتقال باستخدام <Link> ، وليس بعد التحميل الأولي

@ ads1018estrattonbailey AFAIK لا يزال هناك بالفعل عرضان من جانب الخادم عند تحميل الصفحة الأولى: يتم تنفيذ getDataFromTree وعرض الشجرة بأكملها داخليًا ، ثم يتم استدعاء العرض مرة أخرى لإنشاء استجابة HTML. لا تفكر فيما إذا كان هناك أي طريقة لتجنب ذلك ، لكن أعتقد أنه لا يزال يعمل بشكل جيد بفضل رحلات الشبكة ذهابًا وإيابًا التي تجنبها SSR.

أعتقد أن الأداء يكون بحد أقصى عندما تتم استضافة خادم GraphQL على نفس الجهاز مثل خادم Next.js ، لذلك يمكنك دائمًا تجربة ذلك إذا كنت مهتمًا بالأداء (في هذه المرحلة ، أقوم بعمل نموذج أولي لتطبيقي باستخدام Graphcool لـ الخلفية ، بينما يتم نشر Next.js مع Now / Zeit World).

sedubois estrattonbailey صححني إذا كنت مخطئًا ، لكننا ما زلنا نقدم مرة واحدة فقط. لا يعرض getDataFromTree الشجرة ، بل يُرجع ببساطة وعدًا عندما تكون البيانات جاهزة في متجر Apollo Client الخاص بنا. عند النقطة التي يحل فيها الوعد ، سيتم تهيئة متجر Apollo Client الخاص بنا تمامًا ويمكننا اختياريًا عرض الشجرة إذا أردنا تمرير النتائج المشددة في استجابة لطلب HTTP ولكننا لا نفعل ذلك في المثال الخاص بي.

لا يعرض getDataFromTree الشجرة

@ ads1018 AFAIK وبالنظر إلى كود Apollo ، فإنه _ يفعل _ يجعل الشجرة متكررة (فقط لتشغيل جلب بيانات Apollo). هذا هو 2 يجعل من جانب الخادم عند تحميل الصفحة الأولى.

ولكن على أي حال ، بفضل العرض التوضيحي الخاص بك ، لدينا الآن تكامل قابل للاستخدام بين Apollo و Next ، ولم تعد الأسئلة المتبقية حول أداء Apollo SSR خاصة بـ Next.js بعد الآن على ما أعتقد. أود أن أقترح طرح أسئلة حول ذلك هناك.

sedubois ما هو تقديم على أية حال؟ كنت أسميها تمشي وتهز الشجرة. يبدو أنه تم تحسينه جيدًا - تم إيقافه setState وعدم وجود تسوية في DOM.

@ ads1018 مثال جميل! يبدو أنه تمت إضافته إلى Wiki هنا أيضًا ، لذا من المحتمل إغلاق هذه المشكلة؟

ccrauchg

يجب أن نحصل على منشور مدونة حول Apollo + Next.js على مدونة Apollo!

مثالstubailo @ ads1018 رائع 👏 بالنسبة لشيء أكبر باستخدام نفس مبادئ Apollo ، يمكنك التحقق من تطبيقي: https://github.com/relatenow/relate

شكراhelfer. أنا سعيد بكيفية ظهوره. أشعر أنني اكتشفت الكأس المقدسة لتطوير التطبيقات باستخدام Next.js + Apollo. كنت أقصد المتابعة مع منشور مدونة في محاولة لنشر الإنجيل ولكنني لم أتطرق إليه. stubailo يسعدني التعاون في إعداد قطعة في منشور Apollo المتوسط ​​:)

صيحة ضخمة إلى sedubois للمساعدة في المثال وتطبيقه الجميل . 😄

@ ads1018 أحب أن أطلعك على المدونة. عندما تكون مستعدًا للدردشة حول هذا الموضوع ، أرسل لي (هذا) على Apollo Slack. :)

helfer أنت على حق تماما. يجب أن أقوم بإصدار تصريح إصدار جديد لمعرفة ما إذا كان من الممكن إغلاق المشكلات

تضمين التغريدة

هل يعرف أي شخص مشكلة / علاقات عامة يجب مراقبتها - بخصوص طلب البيانات مرتين من جانب الخادم؟ فضولي فقط

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات