اذهب إلى المحتوى
  • 0

مشكلة في مكون ال head في nextjs

عبد النور محمد

السؤال

لماذا مكون ال head لا يعرض معلومات ال meta ويرسلها أثناء server side rendering

function Book({ getBook, addBook, removeBook, auth, cart, book }) {
 .......

  return (
    <Box m={['0', '5%']}>
      {data && <Filter categories={data.bookCategories} publishers={data.publishers}></Filter>}
      <Box mt="50px">
       

        <Box>
          {!data && (
            <Box textAlign="center">
              <Spinner size="xl" />
            </Box>
          )}
          <Grid
            pr={['2%', '2%', '7%', '7%']}
            pl={['2%', '2%', '7%', '7%']}
            templateColumns={['1fr', '1fr', '0.5fr 2fr', '0.5fr 2fr']}
            gap="10px"
          >
            {data ? (
              <>
              <Head>
          			<title>{book?.title}</title>
          			<meta name="title" content={book?.title} />
          			<meta name="description" content={book?.description} />

          			<meta property="og:title" content={book?.title} />
          
          			<meta property="og:url" content={`${process.env.NEXT_PUBLIC_BASE}/book/${book?.id}`} />
          			<meta property="og:type" content="book" />
          			<meta property="og:description" content={book?.description} />
         			<meta property="og:image" content={`${process.env.NEXT_PUBLIC_STORAGE}/${book?.cover}`} />
               </Head>
              </Grid>
        </Box>
      </Box>
    </Box>
  );
}

const mapStateToProps = (state) => {
  return { cart: state.cart, auth: state.auth };
};

const mapDispatchToProps = (dispatch) => {
  return {
    getBook: (id) => dispatch(getBook(id)),
    addBook: (book) => dispatch(addBook(book)),
    removeBook: (book) => dispatch(removeBook(book)),
  };
};

export async function getServerSideProps({ params }) {
  const res = await axios.get(`${process.env.NEXT_PUBLIC_API}/books/${params.id}`);
  return {
    props: {
      book: res.data,
    },
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(Book);

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

هذه المشكلة من المشكلات التي تعبر جيدا عن معنى server side rendering   بحيث أنك وضعا شرطا يتوفر الا في client وهذا الشرط هو تواجد ال data ووضعت ال head داخل ذلك و data لن تكون متوفرة في server side rendering وبالتالي أنت لن تحصل على معلومات داخل ال head والطريقة لاصلاح ذلك هي فقط بعدم وضع أي شرط للشيفرة التي ينبغي لها أن تشتغل في server

   {data ? (
              <>
              <Head>
          			<title>{book?.title}</title>
          			<meta name="title" content={book?.title} />
          			<meta name="description" content={book?.description} />

          			<meta property="og:title" content={book?.title} />
          
          			<meta property="og:url" content={`${process.env.NEXT_PUBLIC_BASE}/book/${book?.id}`} />
          			<meta property="og:type" content="book" />
          			<meta property="og:description" content={book?.description} />
         			<meta property="og:image" content={`${process.env.NEXT_PUBLIC_STORAGE}/${book?.cover}`} />
               </Head>

بدل وضع head داخل الشرط لتواجد data نخرجها لتكون ليست مقيدة بذلك الشرط

              <Head>
          			<title>{book?.title}</title>
          			<meta name="title" content={book?.title} />
          			<meta name="description" content={book?.description} />

          			<meta property="og:title" content={book?.title} />
          
          			<meta property="og:url" content={`${process.env.NEXT_PUBLIC_BASE}/book/${book?.id}`} />
          			<meta property="og:type" content="book" />
          			<meta property="og:description" content={book?.description} />
         			<meta property="og:image" content={`${process.env.NEXT_PUBLIC_STORAGE}/${book?.cover}`} />
               </Head>   
     {data ? (
              .....
            )

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...