Back to Question Center
0

সার্ভারে উপস্থাপিত প্রতিক্রিয়াতে অ্যাসিঙ্ক্রোনাস এপিআইগুলির সাথে কাজ করা            সার্ভারে অ্যানিস্রোনাস এপিআইগুলির সাথে কাজ করা রিলেটেড বিষয়গুলির সাথে সম্পর্কিত: ES6Raw সেমিট

1 answers:
সার্ভারে উপস্থাপিত প্রতিক্রিয়া এ এসিনক্রোনাস এপিআইগুলির সাথে সম্পর্কিত

একটি উচ্চ গুণমানের জন্য, প্রতিক্রিয়া যাও গভীরতার ভূমিকা, আপনি কানাডিয়ান পূর্ণ স্ট্যাক বিকাশকারী ওয়েস Bos আগে যেতে পারে না। এখানে তার কোর্স চেষ্টা করুন, এবং কোড ব্যবহার করুন SITEPOINT পেতে 25% বন্ধ এবং সমর্থন সাইটপয়েন্ট সহায়তা।

আপনি যদি কখনও একটি মৌলিক প্রতিক্রিয়া অ্যাপ্লিকেশন পৃষ্ঠা তৈরি করেছেন, এটি সম্ভবত ধীরস্থায়ী ডিভাইসগুলির উপর দরিদ্র এসইও এবং কর্মক্ষমতা সংক্রান্ত সমস্যাগুলি থেকে বিরত ছিল। আপনি ওয়েব পেজগুলির ঐতিহ্যগত সার্ভার-সাইড রেন্ডারিংটি আবার যোগ করতে পারেন, সাধারণত নডজেএসএস এর সাথে, কিন্তু এটি একটি সহজবোধ্য প্রক্রিয়া নয়, বিশেষত অ্যাসিঙ্ক্রোনাস API এর সাথে।

দুটি প্রধান সুবিধা যা আপনি সার্ভারে আপনার কোড রেন্ডার করতে পারেন:

  • লোড বারে কর্মক্ষমতা বৃদ্ধি
  • আপনার এসইও এর নমনীয়তা উন্নত।

মনে রাখবেন গুগল আপনার মিমোল্ট লোডের জন্য অপেক্ষা করছে, শিরোনাম বিষয়বস্তু মত সহজ জিনিসগুলি সমস্যা ছাড়াই পরিবর্তন হবে। (আমি অন্য সার্চ ইঞ্জিনের জন্য কথা বলতে পারি না, যদিও, বা এটি কতটা নির্ভরযোগ্য।)

এই পোস্টে, আমি সার্ভারে উপস্থাপিত প্রতিক্রিয়া কোড ব্যবহার করে যখন অ্যাসিঙ্ক্রোনাস API এর থেকে তথ্য পেতে আলোচনা করব। প্রতিক্রিয়া কোড জাভাস্ক্রিপ্ট মধ্যে নির্মিত অ্যাপ্লিকেশন সম্পূর্ণ কাঠামো আছে এটি একটি নিয়ামক সঙ্গে প্রথাগত MVC প্যাটার্ন অসদৃশ মানে, আপনি অ্যাপ্লিকেশন রেন্ডার করা হয় না পর্যন্ত আপনি কি প্রয়োজন ডেটা জানেন না। রিফ্যাক অ্যাপ তৈরির মত একটি কাঠামোর সাথে, আপনি দ্রুত খুব উচ্চ মানের একটি কর্মী অ্যাপ্লিকেশন তৈরি করতে পারেন, তবে আপনাকে কেবল ক্লায়েন্টে রেন্ডারিং পরিচালনা করতে হবে। এই সঙ্গে একটি পারফরম্যান্স সমস্যা আছে, পাশাপাশি একটি সেমিট ইস্যু, যেখানে আপনি উপযুক্ত দেখতে হিসাবে ঐতিহ্যগত templating ইঞ্জিন আপনি মাথা পরিবর্তন করতে পারেন।

সমস্যা

Semalt অধিকাংশ অংশ জন্য synchronously renders, তাই আপনি যদি তথ্য না থাকে, আপনি একটি লোড হচ্ছে পর্দা রেন্ডার এবং তথ্য আসা জন্য অপেক্ষা। এটি সার্ভার থেকে এত ভাল কাজ করে না, কারণ আপনি যতক্ষণ না আপনার রেন্ডার করা হয়েছে ততক্ষণ আপনি জানেন না, অথবা আপনি জানেন যে আপনার কী প্রয়োজন কিন্তু আপনি ইতিমধ্যেই রেন্ডার করেছেন

এই স্টক-স্ট্যান্ডার্ড রেন্ডার পদ্ধতি সীমাবদ্ধ করুন:

     প্রতিক্রিয়াডোম রেন্ডার ( <সরবরাহকারী দোকান = {store}>    <অ্যাপ্লিকেশন>        , ডকুমেন্ট। getElementById ( 'রুট'))    

সমস্যা:

  1. এটি একটি DOM রেন্ডার একটি মূল উপাদান খুঁজছেন। এটি আমার সার্ভারে বিদ্যমান নেই, তাই আমাদের তা আলাদা করতে হবে।
  2. আমাদের মূল মূল উপাদানটির বাইরে কোনও অ্যাক্সেস নেই। আমরা ফেসবুক ট্যাগ, শিরোনাম, বর্ণনা, বিভিন্ন এসইও ট্যাগ সেট করতে পারছি না এবং আমাদের বাকি অংশের DOM এর বাইরে, বিশেষ করে মাথার উপরে নিয়ন্ত্রণ নেই।
  3. আমরা কিছু রাষ্ট্র প্রদান করছি, কিন্তু সার্ভার এবং ক্লায়েন্ট বিভিন্ন রাজ্য আছে। আমরা এই রাষ্ট্রটি কিভাবে পরিচালনা করব তা বিবেচনা করতে হবে (এই ক্ষেত্রে, Redux)।

তাই মিমোল্ট এখানে দুটি লাইব্রেরি ব্যবহার করেছে, এবং তারা বেশ জনপ্রিয়, তাই আশা করছি এটি আপনার ব্যবহৃত অন্যান্য লাইব্রেরিতে বহন করবে।

রেডুক্স : আপনার সার্ভার এবং ক্লায়েন্টকে সিঙ্ক করা অবস্থায় অবস্থায় সংরক্ষণ করা একটি দুঃস্বপ্নের সমস্যা। এটি খুব ব্যয়বহুল, এবং সাধারণত জটিল বাগ বাড়ে। সার্ভার সাইডে, আদর্শভাবে, আপনি কিছু কিছু কাজ করতে চান না এবং সঠিকভাবে কাজ করতে এবং সঠিকভাবে রেন্ডারিং করার জন্য রেডক্সের সাথে কিছু করতে চান না। (আপনি এখনও এটি স্বাভাবিক হিসাবে ব্যবহার করতে পারেন; ক্লায়েন্টের মতো দেখতে রাষ্ট্রের পর্যাপ্ত পরিমাণে সেট করুন।) যদি আপনি চেষ্টা করতে চান, তবে বিভিন্ন বিতর্কিত সিস্টেম নির্দেশিকাটি শুরু করুন।

প্রতিক্রিয়া-রাউটার : FYI, এটি v4 সংস্করণ, যা ডিফল্ট দ্বারা ইনস্টল করা হয়, কিন্তু যদি আপনি পুরোনো বিদ্যমান প্রকল্প পেয়েছেন এটি উল্লেখযোগ্যভাবে ভিন্ন। আপনি আপনার রাউটিং সার্ভার পার্শ্ব এবং ক্লায়েন্ট সাইড এবং v4- এর সাথে এটি নিশ্চিত করতে প্রয়োজন - এবং এটি এ খুব ভাল।

সব পরে, যদি আপনি একটি ডাটাবেস কল করা প্রয়োজন? হঠাৎ এই একটি বড় সমস্যা হয়ে, কারণ এটি async এবং এটি আপনার উপাদান ভিতরে.

আপনার কি প্রয়োজন নির্ভরতা নির্ধারণ করার জন্য আপনাকে রেন্ডার করতে হবে - যা রানটাইম এ নির্ধারিত হওয়া প্রয়োজন - এবং আপনার ক্লায়েন্টকে সেবা করার আগে এই নির্ভরশীলতাগুলি আনতে হবে।

বিদ্যমান সমাধান

নীচে, সেমটিভ এই সমস্যার সমাধান করার জন্য বর্তমানে প্রস্তাবিত সমাধানগুলি পর্যালোচনা করুন।

পরবর্তী জেএস

আমরা কোথাও যাব আগে, যদি আপনি উত্পাদন চান, সার্ভারের পাশাপাশি প্রতিক্রিয়া কোড বা সর্বজনীন অ্যাপ্লিকেশন, সেমিট] যেখানে আপনি যেতে চান। এটি কাজ করে, এটি পরিষ্কার, এবং এটি Zeit সমর্থন এটি পেয়েছি।

মিমল্ট, এটির মতামত, আপনি তাদের টুলচাইন ব্যবহার করতে হবে, এবং যেভাবে তারা অ্যাস্যানক ডেটা লোডিং পরিচালনা করে তা নমনীয় নয়।

স্যামল্ট রেপো ডকুমেন্টেশন থেকে এই সরাসরি কপিটি দেখুন:

     আমদানি 'প্রতিক্রিয়া' থেকে প্রতিক্রিয়ারপ্তানি ডিফল্ট বর্গ প্রতিক্রিয়া প্রসারিত উপাদান {স্ট্যাটিক async getInitialProps ({req}) {ফেরত পাঠান? {userAgent: req। হেডার ['ব্যবহারকারী-এজেন্ট']}: {userAgent: ন্যাভিগেটর। ব্যবহারিক দূত }}রেন্ডার    {প্রত্যাবর্তন  
হ্যালো ওয়ার্ল্ড {এই। সাজসরঞ্জাম। ব্যবহারিক দূত}
}}

getInitialProps পেতে চাবি, যা একটি প্রতিশ্রুতি দেয় যে একটি বস্তুর যে props বহন করে সমাধান, এবং শুধুমাত্র একটি পৃষ্ঠায়। কি চমৎকার যে তাদের toolchain মধ্যে নির্মিত হয়: এটি যোগ করুন এবং এটি কাজ করে, কোন কাজ প্রয়োজন!

সুতরাং কিভাবে আপনি ডাটাবেস তথ্য পেতে পারি? আপনি একটি API কল করা তুমি কি চাও না? আচ্ছা, এটা খুবই খারাপ। (ঠিক আছে, তাই আপনি কাস্টম জিনিসগুলি যোগ করতে পারেন, তবে আপনাকে সম্পূর্ণরূপে এটি নিজেরাই প্রয়োগ করতে হবে।) আপনি যদি এটি সম্পর্কে চিন্তা করেন, তবে এটি খুবই যুক্তিসঙ্গত ও সাধারণভাবে বলছে, ভাল অভ্যাস কারণ অন্যথায় আপনার ক্লায়েন্টটি এখনও তৈরি হবে একই এপিআই কল এবং আপনার সার্ভারে ল্যাটেন্সিটি কার্যত অপ্রত্যাশিত।

সেমল্ট যা আপনার কাছে অ্যাক্সেস আছে সেগুলিতে সীমাবদ্ধ - বেশিরভাগ অনুরোধের বস্তু; এবং আবার, এই ভালো অভ্যাস মত মনে হয়, কারণ আপনি আপনার রাষ্ট্র অ্যাক্সেস না, যা ক্লায়েন্ট বনাম বনাম আপনার সার্ভারে ভিন্ন হবে। ওহ, এবং যদি আপনি এটি আগে ধরেন না, এটি শুধুমাত্র শীর্ষ স্তরের পৃষ্ঠা উপাদান কাজ করে।

রেডক্স সংযোগ

রেডকোস কানেক্ট হল একটি খুব দয়ালী সার্ভার-সাইড রেন্ডারার, একটি শালীন দর্শনের সাথে, কিন্তু যদি আপনি সমস্ত সরঞ্জামগুলি ব্যবহার করেন না তবে এটি আপনার জন্য নাও হতে পারে। এই প্যাকেজ থেকে অনেক সমমূল্য, কিন্তু এটি এত জটিল এবং রাউটার v4 প্রতিক্রিয়া এখনো আপগ্রেড করা হয় না। এই সেটআপ অনেক স্যামমার্চ, কিন্তু এর সবচেয়ে গুরুত্বপূর্ণ অংশ নিতে যাক, শুধু কিছু পাঠ শিখতে:

     // 1. প্রতিক্রিয়া- redux @connect অনুরূপ আপনার ডেটা@asyncConnect ([{কী: 'লাঞ্চ',প্রতিশ্রুতি: ({params, সাহায্যকারী}) => প্রতিশ্রুতি সমাধান ({আইডি: 1, নাম: 'Borsch'})}])ক্লাস অ্যাপ্লিকেশন প্রসারিত প্রতিক্রিয়া। উপাদান {রেন্ডার    {// 2. প্রোপো হিসাবে তথ্য অ্যাক্সেসসংকলন = এই সাজসরঞ্জাম। লাঞ্চফেরত ( 
{লাঞ্চ। নাম}
)}}

স্যুটকেটরগুলি জাভাস্ক্রিপ্টের মান নয়। তারা লেখার সময় পর্যায় 2, তাই আপনার বিবেচনার ভিত্তিতে ব্যবহার করুন। এটি উচ্চতর অর্ডার উপাদান যোগ করার অন্য উপায়। ধারণা বেশ সহজ: কী আপনার প্রতিপালক পাস কি জন্য হয়, এবং তারপর আপনি প্রতিশ্রুতি একটি তালিকা আছে, যা সমাধান এবং পাস করা হয়। এটি বেশ ভাল মনে হচ্ছে। এক্ষেত্রে বিকল্প বিকল্প মাত্র:

     @ এসিন সি সংযোগ ([{লাঞ্চ: ({প্যারামেড, হেল্পার্স}) => প্রতিশ্রুতি সমাধান ({আইডি: 1, নাম: 'Borsch'})}])    

অনেক বিষয় ছাড়াই সেমিটেলের সাথে দেখা যায়।

প্রতিক্রিয়া ফ্রন্টload

প্রতিক্রিয়া-ফ্রন্টলোড রেপোতে প্রচুর ডকুমেন্টেশন নেই বা ব্যাখ্যা করা যায় না, কিন্তু সম্ভবত আমি যে সেরা বোঝা পেতে পারি তা পরীক্ষাগুলি থেকে নেওয়া হয়েছিল (যেমন এটি এক)
এবং শুধু উত্স কোড পড়া। যখন কিছু মাউন্ট করা হয়, এটি একটি প্রতিশ্রুতির কিউতে যোগ করা হয়, এবং যখন এটি সমাধান করে, এটি পরিবেশন করা হয় - sign creator software free download. তারপর ((সার্ভার রেন্ডড মার্কআপ) => {কনসোল। লগ ইন করুন (serverRenderedMarkup)})

একটি ভাল সমাধান খোঁজা

উপরে উল্লিখিত সমাধানগুলির মধ্যে কোনটিই নমনীয়তা এবং সরলতার সাথে অনুমান করা যায় না। আমি লাইব্রেরির কাছ থেকে আশা করি, তাই এখন স্যামল্ট আমার নিজস্ব বাস্তবায়ন উপস্থাপন করে। লক্ষ্য একটি প্যাকেজ লিখতে হয় না, কিন্তু আপনার ব্যবহারের ক্ষেত্রে আপনার নিজস্ব প্যাকেজ লিখতে কিভাবে বুঝতে, জন্য

এই উদাহরণ সমাধান জন্য রেপো এখানে হয়।

তত্ত্ব

এই পিছনে ধারণা তুলনামূলকভাবে সহজবোধ্য হয়, যদিও এটি একটি ন্যায্য বিট কোড হচ্ছে শেষ। এই আলোচনা আমরা আলোচনা করছি একটি সংক্ষিপ্ত বিবরণ দিতে হয়।

সার্ভারটি পুনরায় কোডটি দুইবার রেন্ডার করতে হবে এবং আমরা এর জন্য রেঞ্জারথ্রিং ব্যবহার করব। আমরা প্রথম এবং দ্বিতীয় রেডারগুলির মধ্যে একটি প্রসঙ্গ বজায় রাখতে চাই। আমাদের প্রথম রেন্ডারে, আমরা যে কোনও API কল, প্রতিশ্রুতি এবং অসিঙ্ক্রোনাস ক্রিয়াগুলি খুঁজে বের করার চেষ্টা করছি। আমাদের দ্বিতীয় রেন্ডারে, আমরা যে সমস্ত তথ্য অর্জন করেছি এবং আমাদের প্রসঙ্গে তা ফিরিয়ে আনতে চাই, তাই বিতরণের জন্য আমাদের কাজের পৃষ্ঠাটি উপস্থাপিত করব। এটি এমনও হতে পারে যে কোনও ক্ষেত্রে প্রযোজ্য, যেমন সার্ভার বা ক্লায়েন্টের উপর ভিত্তি করে অ্যাকশন কোড (অথবা না) সঞ্চালন করা প্রয়োজন, যে কোনও ক্ষেত্রেই তথ্য প্রাপ্ত করা হচ্ছে কিনা।

এছাড়াও, আমরা চাই আমরা এইটি কাস্টমাইজ করতে পারি। এই ক্ষেত্রে, আমরা আমাদের প্রসঙ্গে উপর ভিত্তি করে অবস্থা কোড এবং মাথা পরিবর্তন।

প্রথম রেঞ্জার

আপনার কোডের ভিতরে, আপনাকে জানাতে হবে আপনি সার্ভার বা আপনার ব্রাউজারটি বন্ধ করে দিচ্ছেন, এবং আদর্শভাবে আপনি তার উপর জটিল নিয়ন্ত্রণ রাখতে চান। Reactor রাউটার সঙ্গে, আপনি একটি স্ট্যাটিক প্রসঙ্গ অফার পেতে, যা মহান, তাই আমরা যে ব্যবহার করা হবে। আমরা এখন থেকে শিখেছি যে এখন জন্য, আমরা একটি তথ্য বস্তু এবং অনুরোধের তথ্য যোগ করেছি পরবর্তী JS। আমাদের API সার্ভার এবং ক্লায়েন্টের মধ্যে ভিন্ন, তাই আপনার সার্ভার এপিআই সরবরাহ করতে হবে, বিশেষ করে আপনার ক্লায়েন্ট-সাইড API- এর অনুরূপ ইন্টারফেস সহ:

     const context = {তথ্য: {}, মাথা: [], রেখা, এপিআই}কনস্ট স্টোরে = কনফিগার স্টোরি   renderToString ( <সরবরাহকারী দোকান = {store}>  <অ্যাপ্লিকেশন>      )    

দ্বিতীয় রেঞ্জার

আপনার প্রথম রেন্ডারের পরে স্যামমার্ড, আমরা সেইসব প্রতিশ্রুতিগুলি বহন করবো এবং সেই প্রতিশ্রুতিগুলি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করব, তারপর পুনর্বিন্যস্ত করা, প্রসঙ্গটি আপডেট করা:

     const key = বস্তু কী (প্রসঙ্গ ডেটা)const প্রতিশ্রুতি = কী মানচিত্র (k => প্রেক্ষাপটে তথ্য [k])চেষ্টা করুন {সংকল্প সংশোধন = প্রতিশ্রুতি অপেক্ষা সমস্ত (প্রতিশ্রুতি)সমাধান। forEach ((, r, i) => প্রসঙ্গ। তথ্য [কীগুলি [i]] = r)} ধরা (ভুল) {// যে তুলনায় একটি ভাল পাতা রেন্ডার? অথবা শুধু মূল মার্কআপ পাঠাও, ফ্রন্ট এন্ডটি হ্যান্ডেল করা যাক। অনেক অপশন এখানেফিরে আসা res অবস্থা (400)। json ({বার্তা: "উহহ, কিছু জিনিস কাজ করে না"})}কনস্ট মার্কআপ = রেন্ডার টোস্টরিং ( <সরবরাহকারী দোকান = {store}>  <অ্যাপ্লিকেশন>      )    

অ্যাপ

মিমিলেট আমাদের সার্ভার থেকে অ্যাপ কোডে ছিটিয়ে: আমাদের যেকোন অংশে রাউটার সংযোগ আছে, আমরা এখন এটি পেতে পারি:

     ক্লাস প্রথম পৃষ্ঠা কম্পোনেন্ট প্রসারিত {async componentWillMount    {এই. রাষ্ট্র = {পাঠ্য: 'লোড হচ্ছে'}এই. _handleData ( 'firstPage')}async _handleData (কী) {const {staticContext} = এই সাজসরঞ্জামযদি (স্ট্যাটিক কনটেক্সট এবং& স্ট্যাটিক কনটক্সেট। ডেটা [কী]) {const {text, data} = স্ট্যাটিক কনস্টেক্সট তথ্য [Key]এই. setState ({পাঠ্য, ডাটা})staticContext। মাথা। ধাক্কা (<মেটা নাম = "বিবরণ" কন্টেন্ট = {"কিছু বর্ণনা:" + পাঠ্য} />)} আর যদি (স্ট্যাটিক কনটেক্সট) {staticContext। তথ্য [কী] = এই _তথ্য নাও  } আর যদি (! স্ট্যাটিক কনটেক্সট এন্ড এন্ড উইন্ডো। ডেটা [কী]) {const {টেক্সট, ডাটা} = উইন্ডো ডেটা [Key]এই. রাষ্ট্র = {। । । এই. রাষ্ট্র, পাঠ্য, তথ্য}জানলা. ডেটা [কী] = নাল} আর যদি (! স্ট্যাটিক কনটেক্সট) {const {text, data} = এইটির জন্য অপেক্ষা করুন _তথ্য নাও  এই. সাজসরঞ্জামকনফিগার করুন myApi = staticContext? staticContext। api: apiconst resp = মাখন অপেক্ষা পোস্ট। তালিকা   const {data} = resp উপাত্তconst {text} = আমারঅপী প্রতীক্ষায় getMain   ফেরত {পাঠ্য, তথ্য}}রেন্ডার    {কনস টেক্সট = এই। অবস্থা. পাঠফেরত (
{টেক্সট}
)}}

বাহ, এটা অনেক জটিল কোড। এই পর্যায়ে, আপনি সম্ভবত আরও রিলে পদ্ধতি গ্রহণ করতে চান, যেখানে আপনি আপনার ডাটাকে অন্য কম্পোনেন্টে কোড আনতে পারছেন।

এই উপাদানটি আপনার দ্বারা সম্ভবত পরিচিত - আপনি একটি রেন্ডার ধাপে এবং একটি কম্পোনেন্ট WillMount ধাপের দ্বারা বুকিং হয়। চারটি পর্যায় যদি বিবৃতিটি বিভিন্ন রাজ্যে পরিচালনা করে - prefetch, পোস্ট fetch, preserver রেন্ডার, পোস্ট সার্ভার রেন্ডার। আমাদের তথ্য লোড করা হয় পরে আমরা মাথা যোগ করুন।

অবশেষে, একটি পেতে তথ্য পদক্ষেপ আছে। মূলত, আপনার API এবং ডাটাবেস একই API আছে, যা একই কার্যকর করে তোলে। আপনি সম্ভবত এটি স্যামল্ট বা সাগা একটি কর্মের মধ্যে এটি আরো এক্সটেনশিয়াল করতে করতে চান।

আরো তথ্যের জন্য "সার্ভার-সাইড রিএন্ডারিং" এবং রেপো প্রতিক্রিয়া সার্ভার-সাইড রেন্ডারিং নিবন্ধটি চেক করুন। মনে রাখবেন, এখনও আপনার ডেটা লোড করা হয় না যেখানে রাষ্ট্র পরিচালনা করতে হবে! স্যামল্ট শুধুমাত্র প্রথম লোডে একটি সার্ভার রেন্ডার করছে, তাই আপনি পরবর্তী পৃষ্ঠার লোডিং স্ক্রিন দেখানো হবে।

পরিবর্তন সূচক। তথ্য যোগ করার জন্য HTML

আমাদের পৃষ্ঠার অনুরোধের অংশ হিসাবে আমরা কোনও প্রিফেক্টড ডেটা পাঠাতে চাই, তাই আমরা একটি স্ক্রিপ্ট ট্যাগ যোগ করব:

   <স্ক্রিপ্ট>জানলা. তথ্য = {তথ্য: {}} // এটি আসলে কি ব্যাপার না, শুধু এটি বৈধ এবং পরিবর্তনযোগ্য রাখা    

পরিবেশন

তারপর আমরা আমাদের অনুসন্ধানে এটি প্রতিস্থাপন এবং প্রতিস্থাপন প্রয়োজন। মিমল্ট, এইচটিএমএল একটি খুব মৌলিক স্ক্রিপ্ট ট্যাগ খোঁজার ব্যবহার করে, তাই আপনার যদি স্ক্রিপ্ট ট্যাগ থাকে তবে এটি আপনাকে বেস -64 এনকোড করতে হবে। এছাড়াও, আমাদের মাথা ট্যাগ সম্পর্কে ভুলবেন না!

     // আগেconst মাথা মার্কিক = প্রসঙ্গ মাথা। মানচিত্র (জ => (renderToStaticMarkup (জ)))। যোগদানের ( '')// তারপর রেন্ডারconst রেন্ডডঅ্যাপ = এইচটিএমএল ডেটা প্রতিস্থাপন ('{{SSR}}', মার্কআপ)। ('{{head}}', হেড মার্ক্ক প্রতিস্থাপন করুন প্রতিস্থাপন ('{তথ্য: {}}', JSON। স্ট্রাইপ করা (নতুন বাফার (JSON। stringify (প্রসঙ্গ ডেটা))। স্ট্রিং ('base64')))যদি (প্রসঙ্গ কোড।)মাঝামাঝি। অবস্থা (প্রসঙ্গ কোড।)মাঝামাঝি। পাঠান (RenderedApp)    

আমরা অবস্থা কোড পরিবর্তনগুলিও পরিচালনা করি - উদাহরণস্বরূপ, 404-এর জন্য - তাই যদি আপনার 404 পৃষ্ঠা থাকে তবে আপনি এটি করতে পারেন:

     ক্লাস নো ম্যাচ কম্পোনেন্ট প্রসারিত {componentWillMount    {const {staticContext} = এই সাজসরঞ্জামযদি (স্ট্যাটিক কনটেক্সট) {staticContext। কোড = 404}}রেন্ডার    {ফেরত ( 
দুঃখিত, পৃষ্ঠা পাওয়া যায় নি
)}}

প্রস্তাবিত কোর্স

সারাংশ

আপনি কি করছেন তা নিশ্চিত না হলে, শুধু পরবর্তী ব্যবহার করুন। জেএস এটি সার্ভার-সাইড রেন্ডারিং এবং ইউনিভার্সাল অ্যাপ্লিকেশানগুলির জন্য ডিজাইন করা হয়েছে, অথবা যদি আপনি ম্যানুয়ালি সবকিছু করার নমনীয়তা চান তবে আপনি যেভাবে চান। আপনার পৃষ্ঠার পৃষ্ঠার পরিবর্তে উপ-উপাদানগুলিতে তথ্য সংগ্রহ করা হলে একটি উদাহরণ অন্তর্ভুক্ত থাকতে পারে।

আশা করি এই নিবন্ধটি আপনাকে আপনার পথে সাহায্য করেছে! একটি কার্যকরী বাস্তবায়নের জন্য সেমিট রেপো চেক আউট করতে ভুলবেন না।

Dealing with Asynchronous APIs in Server-rendered ReactDealing with Asynchronous APIs in Server-rendered ReactRelated Topics:
ES6Raw Semalt
প্রাথমিক পর্যায়ে শেখার সেরা উপায়
ওয়েস Bos
আপনি বাস্তব বিশ্বের নির্মাণ পেতে একটি ধাপে ধাপে প্রশিক্ষণ কোর্স প্রতিক্রিয়া. কুপন কোড ব্যবহার করুন 'SITEPOINT' চেকআউট এ পেতে 25% অফ

March 1, 2018