添加链接
注册
登录
link管理
链接快照平台
输入网页链接,自动生成快照
标签化管理网页链接
相关文章推荐
力能扛鼎的饭卡
·
【上海业务资深培训师招聘网_2024年上海业 ...
·
5 月前
·
文质彬彬的大象
·
如何“复制”下一个王心凌?丨创创锦囊_长江商 ...
·
6 月前
·
怕老婆的红茶
·
使用document.execCommand ...
·
6 月前
·
眼睛小的消防车
·
“代表通道”直击⑫丨肖尊湖:造出更多更好更先 ...
·
7 月前
·
礼貌的消防车
·
写生二十年 | ...
·
1 年前
·
link管理
›
Write API-based Contentful components using Render Props | Contentful
https://www.contentful.com/blog/how-to-write-reusable-sane-api-based-components/
坚强的佛珠
3 月前
</noscript><div class="main-grid grid-helper"><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/><div class="grid-helper-col col-span-1"/></div><div class="__className_52cb41"><header class="full_size_container__y8pra"><div class="col-span-full full_size_content__TRZyk"><a class="full_size_linkWrapper__PI51c" data-track-event-name="ninetailed_banner" data-track-action="Click - Studio Banner" data-track-label="Contentful acquires Ninetailed to accelerate AI-driven personalization" data-track-category="Ninetailed" href="/blog/welcoming-ninetailed-contentful/"><p class="typography_paragraph03__hcta_ full_size_text__FJ0jC"><span class="full_size_labelText__7zKUp">New</span><span class="full_size_boldText__YYXI0">Contentful acquires Ninetailed</span>to accelerate AI-driven personalization<span class="icon_icon__Lg8DM icon_icon12___AHTU full_size_arrow__DBj_0"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 13 12"><path stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.886 10l4-4-4-4"/></svg></span></p></a></div></header><nav class="navigation_container__w3Qwb navigation_visible___fciP" aria-label="Main navigation"><div class="navigation_navBarDesktop__QOP93"><div class="nav_bar_container__PguBx main-grid"><div class="nav_bar_innerWrapper__0h_H4 col-span-full"><div class="nav_bar_itemsWrapper__fUG8Z"><a class="nav_bar_logoLink__T2FzO" aria-label="Contentful" href="/"><img alt="Contentful" loading="lazy" width="129" height="26" decoding="async" data-nimg="1" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=256&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=384&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=384&q=100"/><span class="nav_bar_linkText__caPoZ">Contentful</span></a><nav class="nav_bar_nav__BWSVw"><ul class="nav_bar_list__ML_wN" role="menubar"><li class="nav_bar_listItem__uV1ae" role="menuitem"><button class="nav_bar_button__zmb5L" aria-haspopup="true" aria-expanded="false" aria-controls="menu-item-Products"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Products</span><svg xmlns="http://www.w3.org/2000/svg" width="11" height="9" viewbox="0 0 11 9" fill="none" class="nav_bar_icon__PGrN9"><path d="M1.20288 2.11011L5.37476 6.82498C5.41035 6.86522 5.46148 6.88825 5.51519 6.88825C5.56891 6.88825 5.62004 6.86522 5.65563 6.82498L9.82788 2.11011" stroke="black" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button></li><li class="nav_bar_listItem__uV1ae" role="menuitem"><button class="nav_bar_button__zmb5L" aria-haspopup="true" aria-expanded="false" aria-controls="menu-item-Use Cases"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Use Cases</span><svg xmlns="http://www.w3.org/2000/svg" width="11" height="9" viewbox="0 0 11 9" fill="none" class="nav_bar_icon__PGrN9"><path d="M1.20288 2.11011L5.37476 6.82498C5.41035 6.86522 5.46148 6.88825 5.51519 6.88825C5.56891 6.88825 5.62004 6.86522 5.65563 6.82498L9.82788 2.11011" stroke="black" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button></li><li class="nav_bar_listItem__uV1ae" role="menuitem"><button class="nav_bar_button__zmb5L" aria-haspopup="true" aria-expanded="false" aria-controls="menu-item-Resources"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Resources</span><svg xmlns="http://www.w3.org/2000/svg" width="11" height="9" viewbox="0 0 11 9" fill="none" class="nav_bar_icon__PGrN9"><path d="M1.20288 2.11011L5.37476 6.82498C5.41035 6.86522 5.46148 6.88825 5.51519 6.88825C5.56891 6.88825 5.62004 6.86522 5.65563 6.82498L9.82788 2.11011" stroke="black" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button></li><li class="nav_bar_listItem__uV1ae" role="menuitem"><button class="nav_bar_button__zmb5L" aria-haspopup="true" aria-expanded="false" aria-controls="menu-item-Developers"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Developers</span><svg xmlns="http://www.w3.org/2000/svg" width="11" height="9" viewbox="0 0 11 9" fill="none" class="nav_bar_icon__PGrN9"><path d="M1.20288 2.11011L5.37476 6.82498C5.41035 6.86522 5.46148 6.88825 5.51519 6.88825C5.56891 6.88825 5.62004 6.86522 5.65563 6.82498L9.82788 2.11011" stroke="black" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button></li><li class="nav_bar_listItem__uV1ae" role="menuitem"><button class="nav_bar_button__zmb5L" aria-haspopup="true" aria-expanded="false" aria-controls="menu-item-Partners"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Partners</span><svg xmlns="http://www.w3.org/2000/svg" width="11" height="9" viewbox="0 0 11 9" fill="none" class="nav_bar_icon__PGrN9"><path d="M1.20288 2.11011L5.37476 6.82498C5.41035 6.86522 5.46148 6.88825 5.51519 6.88825C5.56891 6.88825 5.62004 6.86522 5.65563 6.82498L9.82788 2.11011" stroke="black" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round"/></svg></button></li><li role="menuitem"><a class="nav_bar_button__zmb5L" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Pricing" data-track-category="Navigation" href="/pricing/"><span class="typography_label__20rrV typography_label03__WZ6Pz nav_bar_buttonLabel__NSAAQ">Pricing</span></a></li></ul></nav></div><div class="nav_bar_itemsWrapper__fUG8Z"><a class="nav_bar_searchButton__DHJIE" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Search" data-track-category="Navigation" aria-label="Search page" href="/search/"><span class="icon_icon__Lg8DM nav_bar_searchButtonIcon__E4Kw6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 20 20"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8" d="M9.167 15.833a6.667 6.667 0 100-13.333 6.667 6.667 0 000 13.333zM17.5 17.5l-3.625-3.625"/></svg></span></a><a class="nav_bar_logInButton__wUkAE" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="https://be.contentful.com/login/" data-track-category="Navigation" href="https://be.contentful.com/login/"><span class="icon_icon__Lg8DM icon_icon24__sQj6u nav_bar_logInIcon__cXIZY"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8" d="M2.846 11.997h12.006M12 9.138l2.86 2.858L12 14.855M4.8 8.493a8.004 8.004 0 11.136 7.274"/></svg></span><span class="typography_label__20rrV typography_label03__WZ6Pz">Log in</span></a><a class="nav_bar_getStartedButton__6jOTA" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Contact sales" data-track-category="Navigation" href="/contact/sales/"><div class="button_markup_root__sACGr button_markup_secondary__F_qxS button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Contact sales</span></div></a></div></div></div></div><div class="navigation_navBarMobile__cW_hq"><div class="nav_bar_mobile_container__sbP2G"><div class="nav_bar_mobile_mobile__j5OVF"><a href="/"><img alt="Contentful" loading="lazy" width="129" height="28" decoding="async" data-nimg="1" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=256&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=384&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/6wNuQ2xMvbw134rccObi0q/bf61badc6d6d9780609e541713f0bba6/Contentful_Logo_2.5_Dark.svg?w=384&q=100"/></a><div class="nav_bar_mobile_rightNav__APWf7"><a class="nav_bar_mobile_searchButton__kCckj" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Search" data-track-category="Navigation" aria-label="Search page" href="/search/"><span class="icon_icon__Lg8DM nav_bar_mobile_searchButtonIcon__0DnXv"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 20 20"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8" d="M9.167 15.833a6.667 6.667 0 100-13.333 6.667 6.667 0 000 13.333zM17.5 17.5l-3.625-3.625"/></svg></span></a><button class="nav_bar_mobile_menuButton__HoNze" aria-label="Open menu"><span class="icon_icon__Lg8DM nav_bar_mobile_menuIcon__NylWo"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 20 16"><path fill="currentColor" fill-rule="evenodd" d="M1 2c-.6 0-1-.5-1-1 0-.6.4-1 1-1h18c.5 0 1 .4 1 1 0 .5-.5 1-1 1H1zm0 7c-.6 0-1-.4-1-1s.4-1 1-1h18c.5 0 1 .4 1 1s-.5 1-1 1H1zm0 7c-.6 0-1-.5-1-1 0-.6.4-1 1-1h18c.5 0 1 .4 1 1 0 .5-.5 1-1 1H1z"/></svg></span></button></div></div><div class="nav_panel_mobile_container__nEcGU"><div class="nav_panel_mobile_innerContainer__pFRuh"><div class="nav_panel_mobile_closeButtonContainer__dSOJr"><button class="nav_panel_mobile_closeButton__yHpI2" aria-label="Close menu"><div class="nav_panel_mobile_closeButtonInner__WZ4Kf"/></button></div><nav role="menu"><div><button aria-expanded="false" aria-controls="mobile-menu-section-0" class="nav_panel_mobile_item__NvXur" role="menuitem"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Products</p><span class="icon_icon__Lg8DM nav_panel_mobile_itemIcon__xu0IT"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 15 8"><path stroke="#000" stroke-linecap="round" d="M14 7L7.262.698 1 7"/></svg></span></button><div id="mobile-menu-section-0" aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div style="transition:opacity 0ms ease 0ms;-webkit-transition:opacity 0ms ease 0ms;opacity:0"><ul class="nav_panel_mobile_itemList__J_s28" role="menu"><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Why Contentful" data-track-category="Navigation" href="/products/"><div class="nav_item_titleWrapper__g9nru"><img alt="contentful-black" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/1ArW0PzOcCwzCf5OivzNTj/f35adf9b11597ae29c3fe3ded20a5335/contentful-black.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/1ArW0PzOcCwzCf5OivzNTj/f35adf9b11597ae29c3fe3ded20a5335/contentful-black.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/1ArW0PzOcCwzCf5OivzNTj/f35adf9b11597ae29c3fe3ded20a5335/contentful-black.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Why Contentful</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">See our composable content platform</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Platform" data-track-category="Navigation" href="/products/platform/"><div class="nav_item_titleWrapper__g9nru"><img alt="platform" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/6rMYaFuGp3XsnIU0OVDF8f/fae0da009618847fee6245a6bc6172f2/platform.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/6rMYaFuGp3XsnIU0OVDF8f/fae0da009618847fee6245a6bc6172f2/platform.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/6rMYaFuGp3XsnIU0OVDF8f/fae0da009618847fee6245a6bc6172f2/platform.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Platform</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Deliver intelligent experiences from one source</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Studio" data-track-category="Navigation" href="/products/studio/"><div class="nav_item_titleWrapper__g9nru"><img alt="studio" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/1o9NEEppfpS2q5gVnU4OIv/d69b1f89c71dfb634a3b6b2f5aa04cf8/studio.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/1o9NEEppfpS2q5gVnU4OIv/d69b1f89c71dfb634a3b6b2f5aa04cf8/studio.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/1o9NEEppfpS2q5gVnU4OIv/d69b1f89c71dfb634a3b6b2f5aa04cf8/studio.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Studio</span><div class="nav_item_tag__aXYTT">New</div><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Visually assemble experiences at scale</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Ecosystem" data-track-category="Navigation" href="/products/ecosystem/"><div class="nav_item_titleWrapper__g9nru"><img alt="ecosystem" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/1cWlGQwSVjYRVaQwW1HZN6/f1dc3920886444ca4e43aa3c60997f1f/ecosystem.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/1cWlGQwSVjYRVaQwW1HZN6/f1dc3920886444ca4e43aa3c60997f1f/ecosystem.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/1cWlGQwSVjYRVaQwW1HZN6/f1dc3920886444ca4e43aa3c60997f1f/ecosystem.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Ecosystem</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Scale with enterprise solutions & partnerships</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Marketplace" data-track-category="Navigation" href="/marketplace/"><div class="nav_item_titleWrapper__g9nru"><img alt="marketplace" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/4gyDF7YILV8Kvd1SWQxLTp/d0496ccfa77c5b29a7e89218d94d45f9/marketplace.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/4gyDF7YILV8Kvd1SWQxLTp/d0496ccfa77c5b29a7e89218d94d45f9/marketplace.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/4gyDF7YILV8Kvd1SWQxLTp/d0496ccfa77c5b29a7e89218d94d45f9/marketplace.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Marketplace</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Apps and integrations to extend Contentful</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="AI and Contentful" data-track-category="Navigation" href="/products/ai/"><div class="nav_item_titleWrapper__g9nru"><img alt="ai" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/3lCVO7ZmBgxofHJO9yGr2z/b267332c914ca2148425199bae6c5e57/ai.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/3lCVO7ZmBgxofHJO9yGr2z/b267332c914ca2148425199bae6c5e57/ai.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/3lCVO7ZmBgxofHJO9yGr2z/b267332c914ca2148425199bae6c5e57/ai.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">AI and Contentful</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Integrate AI to optimize content creation</p></a></li><li role="menuitem"><a class="nav_item_with_image_container__jDeRw" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Ninetailed by Contentful" data-track-category="Navigation" href="/products/ninetailed/"><div class="nav_item_with_image_text__LCR3o"><div class="nav_item_with_image_titleWrapper__5TgjL"><span class="nav_item_with_image_title__4PHFZ">Ninetailed by Contentful</span><div class="nav_item_with_image_tag__SNtQ1">New</div></div><p class="nav_item_with_image_description__jbWMj">Seamlessly create highly personalized experiences at scale</p><div class="nav_item_with_image_labelWrapper__Udy1Q"><span class="nav_item_with_image_label__Dd3N7"/><span class="icon_icon__Lg8DM nav_item_with_image_chevron__JV788"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div></div><div class="nav_item_with_image_mobileImage__QNuhk"><img alt="Nav - mobile - Ninetailed" loading="lazy" decoding="async" data-nimg="fill" class="nav_item_with_image_image__eKE_d" style="height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/5dFRHBe77rwp5UJvSOHkZU/1e673b855e92c4d4342c07f9ac5a9edb/Nav_-_mobile_-_Ninetailed.svg?w=3840&q=100"/></div><div class="nav_item_with_image_desktopImage__aeXkH"><img alt="NavPromo - Ninetailed" loading="lazy" width="250" height="140" decoding="async" data-nimg="1" class="nav_item_with_image_image__eKE_d" style="color:transparent;width:100%;height:auto" srcset="https://images.ctfassets.net/fo9twyrwpveg/2yvSyyLqqwBIhilqAxvGDF/efe60348ed06767bc9bfcccf0834a4ba/NavPromo_-_Ninetailed.png?fm=webp&w=256&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2yvSyyLqqwBIhilqAxvGDF/efe60348ed06767bc9bfcccf0834a4ba/NavPromo_-_Ninetailed.png?fm=webp&w=640&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2yvSyyLqqwBIhilqAxvGDF/efe60348ed06767bc9bfcccf0834a4ba/NavPromo_-_Ninetailed.png?fm=webp&w=640&q=100"/></div></a></li></ul></div></div></div><div><button aria-expanded="false" aria-controls="mobile-menu-section-1" class="nav_panel_mobile_item__NvXur" role="menuitem"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Use Cases</p><span class="icon_icon__Lg8DM nav_panel_mobile_itemIcon__xu0IT"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 15 8"><path stroke="#000" stroke-linecap="round" d="M14 7L7.262.698 1 7"/></svg></span></button><div id="mobile-menu-section-1" aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div style="transition:opacity 0ms ease 0ms;-webkit-transition:opacity 0ms ease 0ms;opacity:0"><ul class="nav_panel_mobile_itemList__J_s28" role="menu"><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Global Marketing & Localization" data-track-category="Navigation" href="/use-case/global-campaign-management/"><div class="nav_item_titleWrapper__g9nru"><img alt="earth-locate" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/42gcDMqUpnFAWjRseObcWx/f80e25e4d3c74c4c7a620cc30fef673a/earth-locate.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/42gcDMqUpnFAWjRseObcWx/f80e25e4d3c74c4c7a620cc30fef673a/earth-locate.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/42gcDMqUpnFAWjRseObcWx/f80e25e4d3c74c4c7a620cc30fef673a/earth-locate.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Global Marketing & Localization</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Personalize content experiences</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Composable Commerce" data-track-category="Navigation" href="/use-case/composable-commerce/"><div class="nav_item_titleWrapper__g9nru"><img alt="shopping-cart-1" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/0XVBVa5jj27wEG8tZzqcw/66d3b4b167002777fab0989920b84548/shopping-cart-1.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/0XVBVa5jj27wEG8tZzqcw/66d3b4b167002777fab0989920b84548/shopping-cart-1.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/0XVBVa5jj27wEG8tZzqcw/66d3b4b167002777fab0989920b84548/shopping-cart-1.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Composable Commerce</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Commerce solutions at scale</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Support Portal & Knowledgebase" data-track-category="Navigation" href="/use-case/support-portal-knowledge-base/"><div class="nav_item_titleWrapper__g9nru"><img alt="read-light-idea" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/1llVCDf0akdTLyhHCGIbZy/ad22b2e4907151964505a66e2d90afad/read-light-idea.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/1llVCDf0akdTLyhHCGIbZy/ad22b2e4907151964505a66e2d90afad/read-light-idea.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/1llVCDf0akdTLyhHCGIbZy/ad22b2e4907151964505a66e2d90afad/read-light-idea.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Support Portal & Knowledgebase</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">FAQs, intranets & more</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Mobile Applications" data-track-category="Navigation" href="/use-case/fast-flexible-mobile-apps/"><div class="nav_item_titleWrapper__g9nru"><img alt="mobile-phone" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/7Cha6lXY6WCJFiFwmBWE5J/80f1d18c5ed66b5e26e293cf9afb25aa/mobile-phone.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/7Cha6lXY6WCJFiFwmBWE5J/80f1d18c5ed66b5e26e293cf9afb25aa/mobile-phone.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/7Cha6lXY6WCJFiFwmBWE5J/80f1d18c5ed66b5e26e293cf9afb25aa/mobile-phone.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Mobile Applications</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Powering mobile experiences for global brands</p></a></li><li role="menuitem"><a class="nav_item_with_image_container__jDeRw" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="SEO with Contentful" data-track-category="Navigation" href="/solutions/seo/"><div class="nav_item_with_image_text__LCR3o"><div class="nav_item_with_image_titleWrapper__5TgjL"><span class="nav_item_with_image_title__4PHFZ">SEO with Contentful</span></div><p class="nav_item_with_image_description__jbWMj">Ensuring your digital experiences are SEO-friendly.</p><div class="nav_item_with_image_labelWrapper__Udy1Q"><span class="nav_item_with_image_label__Dd3N7"/><span class="icon_icon__Lg8DM nav_item_with_image_chevron__JV788"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div></div><div class="nav_item_with_image_mobileImage__QNuhk"><img alt="SEO - mobile nav icon" loading="lazy" decoding="async" data-nimg="fill" class="nav_item_with_image_image__eKE_d" style="height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/6obxd3a6oqCDSFadJh0FZL/e9aa40fb17cf6e494388fda5a8320410/Navigation_highlight_for_SEO_Compliance_-_mobile_2x.png?fm=webp&w=3840&q=100"/></div><div class="nav_item_with_image_desktopImage__aeXkH"><img alt="SEO Promo" loading="lazy" width="250" height="140" decoding="async" data-nimg="1" class="nav_item_with_image_image__eKE_d" style="color:transparent;width:100%;height:auto" srcset="https://images.ctfassets.net/fo9twyrwpveg/4wEAGVqvImZeeU8gR3uR5Y/c88c866aff9203c31e820254625399b0/Navigation_highlight_for_SEO_Compliance_2x.png?fm=webp&w=256&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/4wEAGVqvImZeeU8gR3uR5Y/c88c866aff9203c31e820254625399b0/Navigation_highlight_for_SEO_Compliance_2x.png?fm=webp&w=640&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/4wEAGVqvImZeeU8gR3uR5Y/c88c866aff9203c31e820254625399b0/Navigation_highlight_for_SEO_Compliance_2x.png?fm=webp&w=640&q=100"/></div></a></li></ul></div></div></div><div><button aria-expanded="false" aria-controls="mobile-menu-section-2" class="nav_panel_mobile_item__NvXur" role="menuitem"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Resources</p><span class="icon_icon__Lg8DM nav_panel_mobile_itemIcon__xu0IT"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 15 8"><path stroke="#000" stroke-linecap="round" d="M14 7L7.262.698 1 7"/></svg></span></button><div id="mobile-menu-section-2" aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div style="transition:opacity 0ms ease 0ms;-webkit-transition:opacity 0ms ease 0ms;opacity:0"><ul class="nav_panel_mobile_itemList__J_s28" role="menu"><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Resource Center" data-track-category="Navigation" href="/resources/"><div class="nav_item_titleWrapper__g9nru"><img alt="monitor-programming-book" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/58SYyDb2a5tu5Qruxp3Rnl/df31290d930e8bb8483ab66e65a456e8/monitor-programming-book.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/58SYyDb2a5tu5Qruxp3Rnl/df31290d930e8bb8483ab66e65a456e8/monitor-programming-book.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/58SYyDb2a5tu5Qruxp3Rnl/df31290d930e8bb8483ab66e65a456e8/monitor-programming-book.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Resource Center</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">White-papers, e-books and videos</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Customer Case Studies" data-track-category="Navigation" href="/case-studies/"><div class="nav_item_titleWrapper__g9nru"><img alt="presentation-board-graph" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/3E2PqlnnX9xT4lXK7hIaVX/9515d1a9e761cc9951af2f7ce3f1b24f/presentation-board-graph.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/3E2PqlnnX9xT4lXK7hIaVX/9515d1a9e761cc9951af2f7ce3f1b24f/presentation-board-graph.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/3E2PqlnnX9xT4lXK7hIaVX/9515d1a9e761cc9951af2f7ce3f1b24f/presentation-board-graph.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Customer Case Studies</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Success stories with Contentful</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Blog" data-track-category="Navigation" href="/blog/"><div class="nav_item_titleWrapper__g9nru"><img alt="monitor-page" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/6DgQH5eViJv6AMEseRWp5E/d646c4296baa03acbd9252ce3713aff0/monitor-page.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/6DgQH5eViJv6AMEseRWp5E/d646c4296baa03acbd9252ce3713aff0/monitor-page.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/6DgQH5eViJv6AMEseRWp5E/d646c4296baa03acbd9252ce3713aff0/monitor-page.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Blog</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Get the latest from Contentful</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Events" data-track-category="Navigation" href="/events/"><div class="nav_item_titleWrapper__g9nru"><img alt="calendar-add-1" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/9LV6GctUQ1UL1MVwyAEEf/4dd7bf89eeb15f5156a6494bdff76f8d/calendar-add-1.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/9LV6GctUQ1UL1MVwyAEEf/4dd7bf89eeb15f5156a6494bdff76f8d/calendar-add-1.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/9LV6GctUQ1UL1MVwyAEEf/4dd7bf89eeb15f5156a6494bdff76f8d/calendar-add-1.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Events</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Let's meet up</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Help Center" data-track-category="Navigation" href="/help/"><div class="nav_item_titleWrapper__g9nru"><img alt="messages-bubble-question" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/3oFpbHfGMdaAq297vTUJZS/2808a9524993dcdb94b4dce68c6fb234/messages-bubble-question.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/3oFpbHfGMdaAq297vTUJZS/2808a9524993dcdb94b4dce68c6fb234/messages-bubble-question.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/3oFpbHfGMdaAq297vTUJZS/2808a9524993dcdb94b4dce68c6fb234/messages-bubble-question.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Help Center</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">We've got your back</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Learning Center" data-track-category="Navigation" href="https://training.contentful.com/"><div class="nav_item_titleWrapper__g9nru"><img alt="study-owl" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/1rIpbFl7k1GgrovljVFWG7/5e06212fe2f873ca8dc5b3678b951904/study-owl.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/1rIpbFl7k1GgrovljVFWG7/5e06212fe2f873ca8dc5b3678b951904/study-owl.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/1rIpbFl7k1GgrovljVFWG7/5e06212fe2f873ca8dc5b3678b951904/study-owl.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Learning Center</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Live training, courses and certification</p></a></li><li role="menuitem"><a class="nav_item_with_image_container__jDeRw" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="The New Storytellers" data-track-category="Navigation" href="/the-new-storytellers/"><div class="nav_item_with_image_text__LCR3o"><div class="nav_item_with_image_titleWrapper__5TgjL"><span class="nav_item_with_image_title__4PHFZ">The New Storytellers</span><div class="nav_item_with_image_tag__SNtQ1">New</div></div><p class="nav_item_with_image_description__jbWMj">The people within our customer organizations driving change.</p><div class="nav_item_with_image_labelWrapper__Udy1Q"><span class="nav_item_with_image_label__Dd3N7"/><span class="icon_icon__Lg8DM nav_item_with_image_chevron__JV788"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div></div><div class="nav_item_with_image_mobileImage__QNuhk"><img alt="Webinar Zoom Presenter" loading="lazy" decoding="async" data-nimg="fill" class="nav_item_with_image_image__eKE_d" style="height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/5L8Re4P2VvGEiz7AHfDJym/369f10df040c91a3d26488a88d917809/Webinar_zoom_presenter.png?fm=webp&w=3840&q=100"/></div><div class="nav_item_with_image_desktopImage__aeXkH"><img alt="The New Storytellers - Nav Promo - 5 Characters 3:2" loading="lazy" width="250" height="140" decoding="async" data-nimg="1" class="nav_item_with_image_image__eKE_d" style="color:transparent;width:100%;height:auto" srcset="https://images.ctfassets.net/fo9twyrwpveg/2uJzQgrGQD9GA9LzYo699l/e373bdeeb22af95db454b8b8d6623cd5/Flagship-Promo-Storytellers-3_2_2x.png?fm=webp&w=256&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2uJzQgrGQD9GA9LzYo699l/e373bdeeb22af95db454b8b8d6623cd5/Flagship-Promo-Storytellers-3_2_2x.png?fm=webp&w=640&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2uJzQgrGQD9GA9LzYo699l/e373bdeeb22af95db454b8b8d6623cd5/Flagship-Promo-Storytellers-3_2_2x.png?fm=webp&w=640&q=100"/></div></a></li></ul></div></div></div><div><button aria-expanded="false" aria-controls="mobile-menu-section-3" class="nav_panel_mobile_item__NvXur" role="menuitem"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Developers</p><span class="icon_icon__Lg8DM nav_panel_mobile_itemIcon__xu0IT"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 15 8"><path stroke="#000" stroke-linecap="round" d="M14 7L7.262.698 1 7"/></svg></span></button><div id="mobile-menu-section-3" aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div style="transition:opacity 0ms ease 0ms;-webkit-transition:opacity 0ms ease 0ms;opacity:0"><ul class="nav_panel_mobile_itemList__J_s28" role="menu"><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Developer Portal" data-track-category="Navigation" href="/developers/"><div class="nav_item_titleWrapper__g9nru"><img alt="programming-hold-code" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/4BjmKIc1DDPhHNI4sZbDlU/9e106dd3cb01ab6af841fd3c251526b1/programming-hold-code.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/4BjmKIc1DDPhHNI4sZbDlU/9e106dd3cb01ab6af841fd3c251526b1/programming-hold-code.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/4BjmKIc1DDPhHNI4sZbDlU/9e106dd3cb01ab6af841fd3c251526b1/programming-hold-code.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Developer Portal</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Meet your community</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Documentation" data-track-category="Navigation" href="/developers/docs/"><div class="nav_item_titleWrapper__g9nru"><img alt="paginate-filter-text" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/26QdvU0LB7YiZKtLd3yRG6/70c8c2baa3ea47f072a25998f182d79b/paginate-filter-text.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/26QdvU0LB7YiZKtLd3yRG6/70c8c2baa3ea47f072a25998f182d79b/paginate-filter-text.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/26QdvU0LB7YiZKtLd3yRG6/70c8c2baa3ea47f072a25998f182d79b/paginate-filter-text.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Documentation</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">How to build with Contentful</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Starter Templates" data-track-category="Navigation" href="/starter-templates/"><div class="nav_item_titleWrapper__g9nru"><img alt="navigation-templates" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/46CCoVd24u998abaYZZOwn/392bd3b05b6daacbcc45790c43589f95/navigation-templates.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/46CCoVd24u998abaYZZOwn/392bd3b05b6daacbcc45790c43589f95/navigation-templates.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/46CCoVd24u998abaYZZOwn/392bd3b05b6daacbcc45790c43589f95/navigation-templates.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Starter Templates</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Fast-track your project</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Technologies Getting Started" data-track-category="Navigation" href="/technologies-getting-started/"><div class="nav_item_titleWrapper__g9nru"><img alt="browser-page-hierarchy" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/3PCYYsE5hZHOJ9eBaUxtBY/7486232b383607b67ff0c212fb983148/browser-page-hierarchy.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/3PCYYsE5hZHOJ9eBaUxtBY/7486232b383607b67ff0c212fb983148/browser-page-hierarchy.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/3PCYYsE5hZHOJ9eBaUxtBY/7486232b383607b67ff0c212fb983148/browser-page-hierarchy.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Technologies Getting Started</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Use the tools you love</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Developer Showcase" data-track-category="Navigation" href="/developers/showcase/"><div class="nav_item_titleWrapper__g9nru"><img alt="holy-code" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/7aWaU4nC90kto1NIsFBhdP/c929ce9eb83fc3292db0df4b759d7adf/holy-code.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/7aWaU4nC90kto1NIsFBhdP/c929ce9eb83fc3292db0df4b759d7adf/holy-code.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/7aWaU4nC90kto1NIsFBhdP/c929ce9eb83fc3292db0df4b759d7adf/holy-code.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Developer Showcase</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Awesome projects from the community</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Developer Blog" data-track-category="Navigation" href="/blog/tag/developer/"><div class="nav_item_titleWrapper__g9nru"><img alt="programming-browser" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/7fd8eb8z0sr6hR2PRjgFKI/1e687670a520a32f1076a7209e44eb72/programming-browser.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/7fd8eb8z0sr6hR2PRjgFKI/1e687670a520a32f1076a7209e44eb72/programming-browser.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/7fd8eb8z0sr6hR2PRjgFKI/1e687670a520a32f1076a7209e44eb72/programming-browser.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Developer Blog</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Dev news, tips and how-tos</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Changelog" data-track-category="Navigation" href="/developers/changelog/"><div class="nav_item_titleWrapper__g9nru"><img alt="navigation-changelog" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/2v1heOVX4eX710yMyTOcqQ/621c2e7045c955876a5bed0a32216401/navigation-changelog.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/2v1heOVX4eX710yMyTOcqQ/621c2e7045c955876a5bed0a32216401/navigation-changelog.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/2v1heOVX4eX710yMyTOcqQ/621c2e7045c955876a5bed0a32216401/navigation-changelog.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Changelog</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Stay up to date</p></a></li><li role="menuitem"><a class="nav_item_with_image_container__jDeRw" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Ready to start building?" data-track-category="Navigation" href="/sign-up/"><div class="nav_item_with_image_text__LCR3o"><div class="nav_item_with_image_titleWrapper__5TgjL"><span class="nav_item_with_image_title__4PHFZ">Ready to start building?</span></div><p class="nav_item_with_image_description__jbWMj">Get under the hood and see what’s possible with Contentful.</p><div class="nav_item_with_image_labelWrapper__Udy1Q"><span class="nav_item_with_image_label__Dd3N7"/><span class="icon_icon__Lg8DM nav_item_with_image_chevron__JV788"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div></div><div class="nav_item_with_image_mobileImage__QNuhk"><img alt="Nav Mobile - Dev - Promo" loading="lazy" decoding="async" data-nimg="fill" class="nav_item_with_image_image__eKE_d" style="height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/2vXmkqGKUEgyK6WdIbrlPz/5d54b7fb10cb8ea4c0084b4477711c25/Nav_Mobile_-_Dev_-_Promo.png?fm=webp&w=3840&q=100"/></div><div class="nav_item_with_image_desktopImage__aeXkH"><img alt="Developer - Sign-up - Navigation Promo Tile" loading="lazy" width="250" height="140" decoding="async" data-nimg="1" class="nav_item_with_image_image__eKE_d" style="color:transparent;width:100%;height:auto" srcset="https://images.ctfassets.net/fo9twyrwpveg/7n5fTlnei1Xg2IY7hAfL4k/cfdf5b7468228894fa6e8aca1c38a8a5/Nav_Desktop_-_Dev_-_Promo.png?fm=webp&w=256&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/7n5fTlnei1Xg2IY7hAfL4k/cfdf5b7468228894fa6e8aca1c38a8a5/Nav_Desktop_-_Dev_-_Promo.png?fm=webp&w=640&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/7n5fTlnei1Xg2IY7hAfL4k/cfdf5b7468228894fa6e8aca1c38a8a5/Nav_Desktop_-_Dev_-_Promo.png?fm=webp&w=640&q=100"/></div></a></li></ul></div></div></div><div><button aria-expanded="false" aria-controls="mobile-menu-section-4" class="nav_panel_mobile_item__NvXur" role="menuitem"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Partners</p><span class="icon_icon__Lg8DM nav_panel_mobile_itemIcon__xu0IT"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 15 8"><path stroke="#000" stroke-linecap="round" d="M14 7L7.262.698 1 7"/></svg></span></button><div id="mobile-menu-section-4" aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div style="transition:opacity 0ms ease 0ms;-webkit-transition:opacity 0ms ease 0ms;opacity:0"><ul class="nav_panel_mobile_itemList__J_s28" role="menu"><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Overview" data-track-category="Navigation" href="/partners/"><div class="nav_item_titleWrapper__g9nru"><img alt="people-network" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/tDQaN7067Sr3l10JflAMr/9dea069bf50809ab23de05a7509dd22f/people-network.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/tDQaN7067Sr3l10JflAMr/9dea069bf50809ab23de05a7509dd22f/people-network.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/tDQaN7067Sr3l10JflAMr/9dea069bf50809ab23de05a7509dd22f/people-network.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Overview</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Your growing support system</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Find a Partner" data-track-category="Navigation" href="/partners/solutions/"><div class="nav_item_titleWrapper__g9nru"><img alt="search" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/tMrKazqOZgih1nPLGnUvv/ce10df97c2f08f7cdb2f890a443d1acf/search.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/tMrKazqOZgih1nPLGnUvv/ce10df97c2f08f7cdb2f890a443d1acf/search.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/tMrKazqOZgih1nPLGnUvv/ce10df97c2f08f7cdb2f890a443d1acf/search.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Find a Partner</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Get help implementing Contentful</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Become a Partner" data-track-category="Navigation" href="/partners/contact/"><div class="nav_item_titleWrapper__g9nru"><img alt="person-check" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/62RbCmGOt6ejr6xag8eMZm/9e368fc7ce6f7bbb01376e02a986f041/person-check.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/62RbCmGOt6ejr6xag8eMZm/9e368fc7ce6f7bbb01376e02a986f041/person-check.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/62RbCmGOt6ejr6xag8eMZm/9e368fc7ce6f7bbb01376e02a986f041/person-check.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Become a Partner</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Join our rewarding partner program</p></a></li><li class="nav_item_wrapper__XAu2F" role="menuitem"><a class="nav_item_container__EiPAy" data-track-event-name="click_menu_item" data-track-action="Click - Menu item" data-track-label="Partner Portal" data-track-category="Navigation" href="https://contentful.allbound.com/"><div class="nav_item_titleWrapper__g9nru"><img alt="multiple-circle" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="nav_item_icon__twjYl" style="color:transparent" srcset="https://images.ctfassets.net/jtqsy5pye0zd/7iEjFNf8JYxDmYqie9PAWT/497bc57404ac7983ef89ef06e078354b/multiple-circle.svg?w=32&q=100 1x, https://images.ctfassets.net/jtqsy5pye0zd/7iEjFNf8JYxDmYqie9PAWT/497bc57404ac7983ef89ef06e078354b/multiple-circle.svg?w=48&q=100 2x" src="https://images.ctfassets.net/jtqsy5pye0zd/7iEjFNf8JYxDmYqie9PAWT/497bc57404ac7983ef89ef06e078354b/multiple-circle.svg?w=48&q=100"/><span class="nav_item_title__pkA_C">Partner Portal</span><span class="icon_icon__Lg8DM nav_item_chevron__rMbl6"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 8 12"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.5 11l5-5-5-5"/></svg></span></div><p class="nav_item_description__lxy1t">Full toolkit for partners</p></a></li></ul></div></div></div><div><a role="menuitem" class="nav_panel_mobile_item__NvXur" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Pricing" data-track-category="Navigation" href="/pricing/"><p class="typography_heading__msTWL typography_heading04__PFAbm nav_panel_mobile_itemText__zUE3J">Pricing</p></a></div></nav><div class="nav_panel_mobile_buttonWrapper__6OWRq"><a class="nav_panel_mobile_button__TXnqj" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Get in touch" data-track-category="Navigation" href="/contact/sales/">Contact sales</a><a class="nav_panel_mobile_button__TXnqj nav_panel_mobile_buttonSecondary__2wclj" data-track-event-name="click_navigation_cta" data-track-action="Click - Navigation CTA" data-track-label="Sign up free" data-track-category="Navigation" href="/sign-up/">Sign up free</a></div></div><div class="nav_panel_mobile_loginButtonWrapper__JMuym"><a class="nav_panel_mobile_loginButton__XA8V2" href="https://be.contentful.com/login/">Log in</a></div></div></div></div></nav><main><div class="main-grid relative blog_detail_container__ylrnv"><div class="col-span-full"><div class="breadcrumb_root__aR768"><div class="breadcrumb_breadcrumb__SN5Ur col-span-full"><a href="/blog/">Blog</a> <span class="breadcrumb_divider__6SF1q"> / </span><a href="/blog/category/guides/">Guides</a><span class="breadcrumb_divider__6SF1q"> / </span><span class="breadcrumb_currentPage__0aQO4">Write reusable sane API-based Contentful components using the Render Props pattern</span></div></div><h1 class="typography_heading__msTWL typography_heading01__QN0d1 blog_detail_heading__nzeCh">Write reusable sane API-based Contentful components using the Render Props pattern</h1><div class="blog_detail_updatedPublishedCopy__pB7Zp"><p class="typography_paragraph03__hcta_"/><p class="typography_paragraph03__hcta_">Published on January 23, 2018</p></div><img alt="RenderPropsPAttern" loading="lazy" width="1300" height="750" decoding="async" data-nimg="1" class="blog_detail_image__U6X_B" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/5GO5ZJ6nE4A6EmGWgq6WiC/e6f7f293f9ac2d23702a574beb37be39/RenderPropsPAttern.png?fm=webp&w=1920&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/5GO5ZJ6nE4A6EmGWgq6WiC/e6f7f293f9ac2d23702a574beb37be39/RenderPropsPAttern.png?fm=webp&w=3840&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/5GO5ZJ6nE4A6EmGWgq6WiC/e6f7f293f9ac2d23702a574beb37be39/RenderPropsPAttern.png?fm=webp&w=3840&q=100"/></div><div class="col-span-full lg:col-span-3"><div class="sidebar_authorsSidebar__BGOW9"><p class="typography_paragraph03__hcta_">Written by</p><div class="sidebar_authorWrapper__RQbvI"><img alt="" loading="lazy" width="48" height="48" decoding="async" data-nimg="1" class="sidebar_authorImage__sexFN" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=48&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=96&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=96&q=100"/><div><a class="sidebar_authorLink__Zt3l9" href="/blog/author/stefan-judis/"><p class="typography_paragraph03__hcta_ sidebar_authorName__Hhvfk">Stefan Judis</p><p class="typography_paragraph03__hcta_">Senior Manager of Developer Relations</p></a></div></div></div><div class="sidebar_divider__a6zRi"/><div class="blog_detail_sidebarSticky__i1Lml"><aside class="progressive_bar_item_desktop_stickyProgressivebar__3qOQ_"><p class="typography_paragraph03__hcta_ font-bold">On this page</p><nav class="progressive_bar_item_desktop_root__avfAj"><ul class="progressive_bar_item_desktop_progressiveBarWrap__qCpRL"><li><a class="progressive_bar_item_desktop_menu__IxCfv progressive_bar_item_desktop_active___EBmO" href="#common-implementations-of-api-calls">Common implementations of API calls</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#the-desired-way-of-making-api-calls">The desired way of making API calls</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#meet-the-render-props-pattern">Meet the "render props" pattern</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#using-the-render-props-pattern-in-react">Using the "render props" pattern in React</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#using-the">Using the</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#render">render</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#prop-pattern-in-preact">prop pattern in Preact</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#using-the">Using the</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#render">render</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#prop-pattern-in-vue-js-">prop pattern in Vue.js?</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#api-calls-should-be-components">API calls should be components</a></li><li><a class="progressive_bar_item_desktop_menu__IxCfv" href="#try-contentful-components">Try Contentful components</a></li></ul></nav></aside><div class="blog_detail_subscribeCardContainer__5RsXr"><div class="card_wrapper_root__OsMtq blog_detail_subscribeCard__VC8SR"><div class="basic_card_container__Uy0rw"><img alt="" aria-hidden="true" loading="lazy" width="48" height="48" decoding="async" data-nimg="1" class="basic_card_icon__GrRg4" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=48&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=96&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=96&q=100"/><p class="typography_heading__msTWL typography_heading04__PFAbm basic_card_title__bUXi6">Subscribe for updates</p><p class="typography_paragraph02__wtIHI basic_card_text__CofVC">Build better digital experiences with Contentful updates direct to your inbox.</p></div><div class="round_icon_container__Jmlwp card_wrapper_icon__OMF4u"><span class="icon_icon__Lg8DM icon_icon12___AHTU"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 13 12"><path fill="#fff" d="M1 5a1 1 0 000 2V5zm11 0H1v2h11V5z"/><path stroke="#fff" stroke-linecap="round" stroke-width="2" d="M7 11l4.617-4.617a.5.5 0 000-.707L7 1.058"/></svg></span></div></div></div></div></div><div class="col-span-full md:col-span-full lg:col-span-9"><section id="richTextBody"><p class="typography_paragraph01__q_o85">I play around with JavaScript SDKs a lot. And most of my projects make use of Contentful to pull in content from editors and non-technical people into my applications.</p><p class="typography_paragraph01__q_o85">It doesn't matter if I'm dealing with edited content or GitHub statistics, almost every dataset is available to me via <a href="https://www.contentful.com/blog/api-endpoint/" target="_self" class="richText_link__Fxl_3" rel="">API endpoints</a>. Those datasets then go into my <a href="https://www.contentful.com/developers/docs/javascript/tutorials/getting-started-with-react-and-contentful/" target="_self" class="richText_link__Fxl_3" rel="">React</a>, Preact or Vue.js applications. Up until today I hadn't figured out the best way to work with API data in a component-driven world. <b>But you know what — now I know</b>.</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="common-implementations-of-api-calls" data-richheader="true">Common implementations of API calls</h2><p class="typography_paragraph01__q_o85">Whether you use the widely supported <code>fetch</code> method or an SDK, using API data across tons of components can be tricky. This is because you have to figure out in which component you fetch the data, how you handle state and how to propagate data across components. </p><p class="typography_paragraph01__q_o85">Consider the following Preact snippet:</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">In this code, the <code>App</code> component fetches the data in the lifecycle method <code>componentDidMount</code>. It then sets the response data to the given state of the component which will in turn be used in its <code>render</code> method.</p><p class="typography_paragraph01__q_o85">But what happens if I have to make two calls to fetch data?</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85"><i>You can play with this example on CodeSandbox if you like.</i></p><p class="typography_paragraph01__q_o85">Now I have to make two calls using the <code>getEntries</code> Contentful SDK client – both included in <code>componentDidMount</code>. But to me this code feels a bit messy. And it will get worse the more calls you have to make.</p><p class="typography_paragraph01__q_o85">In the past, this situation would force me to restructure some code and abstract the <a href="https://www.contentful.com/blog/api-call/" target="_self" class="richText_link__Fxl_3" rel="">API calls</a> away — and maybe use a state management library like <a href="https://www.contentful.com/blog/redux-tutorial/" target="_self" class="richText_link__Fxl_3" rel="">Redux</a> or Vuex to keep the components clean.</p><p class="typography_paragraph01__q_o85">The downside of abstracting things into models or utils is that it increases the component complexity. As a result, it might not be obvious what's going on for a developer joining the project. I have to jump between files to understand functionality, and components have to include an increasing number of features.</p><p class="typography_paragraph01__q_o85">On the other hand, using state management with something like Redux comes at a cost. So using state management should be <a href="https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">very well considered</a> since it might add unwanted complexity.</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="the-desired-way-of-making-api-calls" data-richheader="true">The desired way of making API calls</h2><p class="typography_paragraph01__q_o85">I've always dreamt of a magical component that abstracts everything away and provides me with data in a particular "scope." In Vue.js when you loop over items, there are objects magically available inside of directives:</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">As seen above, every <code>item</code> is available inside of the looping <code>li</code> element. Can this approach be used for handling API calls?</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">I planned to dig into the Vue.js core to figure out if that's possible, but then...</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="meet-the-render-props-pattern" data-richheader="true">Meet the "render props" pattern</h2><p class="typography_paragraph01__q_o85">I was listening to <a href="http://www.fullstackradio.com/79" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">an episode of Fullstack Radio</a> with <a href="https://twitter.com/kentcdodds" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">Kent C. Dodds</a> as the guest. The title was "Building Reusable React Components with Render Props." Interesting - I'm listening! </p><p class="typography_paragraph01__q_o85"><b>This immediately caught my attention.</b> Kent talked about the <a href="https://github.com/paypal/downshift" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">downshift react component</a>, which is a reusable autocompletion component. It can be used to build, well... custom autocompletion components. </p><p class="typography_paragraph01__q_o85">The catch is that it provides functionality like keypress handling and item selection — and as a user I only have to deal with providing the interface. I only have to define the markup structure and "make it pretty" so to say.</p><p class="typography_paragraph01__q_o85">The way it works is by making heavy use of the so-called <a href="https://reactjs.org/docs/render-props.html" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">"render props" pattern</a> to provide its functionality. Kent explained how it works - it matched my expectations of a beautiful reusable component structure that makes it possible to share functionality without increased complexity. </p><h3 class="typography_heading__msTWL typography_heading03__1YU58" id="the-idea-of-the-render-props-" data-richheader="true">The idea of the "render props"</h3><p class="typography_paragraph01__q_o85">The "render props" pattern works like so: </p><p class="typography_paragraph01__q_o85">I use a provided component and pass in a <code>render</code> function via props. This <code>render</code> function will then be called inside of the <code>render</code> method of the provided component. Possible logic and API calls can be done in the "wrapper component", and data can be passed to the function I handed in. </p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="using-the-render-props-pattern-in-react" data-richheader="true">Using the "render props" pattern in React</h2><p class="typography_paragraph01__q_o85">Just because <a href="https://github.com/paypal/downshift" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">downshift</a> is written in React, let's have a look at how the "render props" pattern could work for making API calls in React.</p><h3 class="typography_heading__msTWL typography_heading03__1YU58" id="using-a-prop-named-render" data-richheader="true">Using a prop named <code>render</code></h3><p class="typography_paragraph01__q_o85">First I have to write the "render props" component to fetch data from a Contentful API endpoint.</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">The snippet above looks like a lot of code for just making an API call — but now I have "component superpowers". So how can I clean up this API call?</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85"><i>You can play with this example on CodeSandbox.</i><br/></p><p class="typography_paragraph01__q_o85">It might seem funny to pass an anonymous function as a prop, but when you look at it, this looks very close to what I had imagined making API calls – a component wrapper that hides the call and lets me define the visual presentation.</p><p class="typography_paragraph01__q_o85">The anonymous function is executed with an object including <code>items</code> that are part of the API response. Pretty sweet!</p><h3 class="typography_heading__msTWL typography_heading03__1YU58" id="using-the-children-prop" data-richheader="true">Using the <code>children</code> prop</h3><p class="typography_paragraph01__q_o85">I understand that this pattern might make some people uncomfortable, because writing JSX inside of a prop might seem weird. Thankfully there is an even more beautiful way to do it. The React docs describe "render props" as:</p><blockquote class="richText_blockquote__9taGv"><span class="icon_icon__Lg8DM icon_icon24__sQj6u"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24"><path fill="#6D7682" d="M12 2.25A9.75 9.75 0 1021.75 12 9.76 9.76 0 0012 2.25zm0 18A8.25 8.25 0 1120.25 12 8.26 8.26 0 0112 20.25zm1.5-3.75a.75.75 0 01-.75.75 1.5 1.5 0 01-1.5-1.5V12a.75.75 0 110-1.5 1.5 1.5 0 011.5 1.5v3.75a.75.75 0 01.75.75zm-3-8.625a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z"/></svg></span><p class="typography_paragraph01__q_o85">It’s important to remember that just because the pattern is called “render props” you don’t have to use a prop named render to use this pattern. In fact, any prop that is a function that a component uses to know what to render is technically a “render prop.”</p></blockquote><p class="typography_paragraph01__q_o85">It turns out that when you place a function inside of a component, this function is also available as <code>props.children</code>. Remember the following lines?</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">I can modify it to make use of the <code>children</code> prop.</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">And now it becomes even more magical! 🎉</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85"><i>You can play with this example on CodeSandbox if you like.</i><br/></p><p class="typography_paragraph01__q_o85">If I put one function inside(!) of the component it will be available via <code>this.props.children</code> of the wrapper component. </p><p class="typography_paragraph01__q_o85"><i>Quick side note: If you place several functions inside of a component </i><code><i>children</i></code><i> will become an Array.</i></p><p class="typography_paragraph01__q_o85"><b>The code above now looks like 95% of what I dreamed of!</b> <br/>(That's something I can live with.)</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="using-the-render-prop-pattern-in-preact" data-richheader="true">Using the <code>render</code> prop pattern in Preact</h2><p class="typography_paragraph01__q_o85">I started this article with talking about Preact – is this pattern also usable in other frameworks than React? </p><p class="typography_paragraph01__q_o85">Yes it is! When using this pattern in Preact, there is only one tiny difference. Preact does not provide the convenience functionality of <code>children</code> being a function when there is only one child available. That means that <code>props.children</code> is always an Array. But hey... this is a no-brainer.</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85"><i>You can play with this example on CodeSandbox if you like.</i></p><p class="typography_paragraph01__q_o85">The rest stays the same. Pretty neat!</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="using-the-render-prop-pattern-in-vue-js-" data-richheader="true">Using the <code>render</code> prop pattern in Vue.js?</h2><p class="typography_paragraph01__q_o85">By now I have covered React and Preact. So what about my darling Vue.js? Vue.js is a little bit special. You can use JSX in Vue.js, but yeah... everybody I know writes single file components and mixing <code>template</code> elements with JSX render functions doesn't feel right to me. <a href="https://twitter.com/@darrenjennings" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">Darren Jennings</a> clearly describes how you can make it work with mixing these two ways of writing Vue.js components in <a href="https://vuejsdevelopers.com/2018/01/15/vue-js-render-props/" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">this article</a>.</p><h3 class="typography_heading__msTWL typography_heading03__1YU58" id="scoped-slots-in-vue-js" data-richheader="true">Scoped slots in Vue.js</h3><p class="typography_paragraph01__q_o85">If you write a lot of Vue.js code, you might wonder if you could transfer the idea of handing in a template that gets data passed to it into a component using <a href="https://vuejs.org/v2/guide/components.html#Content-Distribution-with-Slots" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">slots</a>. And you're right! It turns out since Vue.js v2.1 there is the possibility to use <a href="https://vuejs.org/v2/guide/components.html#Scoped-Slots" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">scoped slots</a> that make it possible to pass data into the content you want to put into slots.</p><p class="typography_paragraph01__q_o85">This principle is hard to explain without code, so let's have a look.</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85">This Contentful component defines a named slot called <code>render</code>, and then passes the given data into it – <code>items</code> in this case. The other functionality is more or less the same as in the Preact and React examples. The component includes validations for props and makes the actual API call. </p><p class="typography_paragraph01__q_o85">The exciting part is the following:</p><div class="richText_verticalSpace__NshKH"><div class="flex flex-col richText_codeContainer__hSLlX"><pre><p class="code_snippets_codeTitle__Tgk1I"/><div class="code_snippets_codeWrapper__bRNyR code_snippets_markdownCodeWrapper__oNDCV"><p class="typography_paragraph02__wtIHI"><code class="code_snippets_codeSnippets__0vsk4"/></p><button aria-label="Copy command line" class="resetButton" tabindex="0"><div class="button_markup_root__sACGr button_markup_primary__SBfwO button_markup_small__RlJom"><span class="typography_label__20rrV typography_label03__WZ6Pz">Copy</span></div></button></div></pre></div></div><p class="typography_paragraph01__q_o85"><i>You can play with this example on CodeSandbox if you like.</i><br/></p><p class="typography_paragraph01__q_o85">I can now define the query on the <code>Contentful</code> component and use the named slots to pass my template into the component. To retrieve the API data I can use the <code>slot-scope</code> attribute (supported since Vue.js v2.1) and make <code>items</code> available inside of my passed in template. </p><p class="typography_paragraph01__q_o85">This way I don't have to deal with the JavaScript SDK client at all! Because of its verbosity, it doesn't look as lovely as the "render props" pattern in React/Preact, but the outcome is the same – a reusable API component. 🎉</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="api-calls-should-be-components" data-richheader="true">API calls should be components</h2><p class="typography_paragraph01__q_o85">After building single page apps for more than five years now, I have to say that these patterns convinced me. It finally feels easy to make calls in simple apps following a component mindset. Hide the functionality in a component and allow me to make it pretty! I like that.</p><p class="typography_paragraph01__q_o85">And please don't get me wrong, proper abstractions are needed when you have significant complexity, and Redux and co. are great tools to deal with large apps full of functionality. But when it's just me fetching some data in a simple app, <b>this is the way to go for me now</b>.</p><h3 class="typography_heading__msTWL typography_heading03__1YU58" id="additional-resources" data-richheader="true">Additional resources </h3><p class="typography_paragraph01__q_o85">If you're not convinced yet that "render props" are the way to go <code>react-router</code> maintainer <a href="https://twitter.com/mjackson" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">Michael Jackson</a> gave <a href="https://www.youtube.com/watch?v=BcVAq3YFiuc" target="_blank" class="richText_link__Fxl_3" rel="noopener noreferrer">a fantastic talk</a> on this topic comparing mixins, higher order components and the "render props" pattern. Make sure to check this one out!</p><h2 class="typography_heading__msTWL typography_heading02__uof_Q" id="try-contentful-components" data-richheader="true">Try Contentful components</h2><p class="typography_paragraph01__q_o85">Contentful is content infrastructure for any digital project. <a href="https://www.contentful.com/sign-up/" target="_self" class="richText_link__Fxl_3" rel="">Sign up now</a> for free to give it a spin! </p><div class="blog_detail_subscribeCardMobile__EMsQF"><div class="blog_detail_subscribeCardContainer__5RsXr"><div class="card_wrapper_root__OsMtq blog_detail_subscribeCard__VC8SR"><div class="basic_card_container__Uy0rw"><img alt="" aria-hidden="true" loading="lazy" width="48" height="48" decoding="async" data-nimg="1" class="basic_card_icon__GrRg4" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=48&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=96&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2e5N7zSjP2wD7Cp49FEr1j/bcc030f3e38bcd5aa05c1249641fc1d4/envelope-open.svg?w=96&q=100"/><p class="typography_heading__msTWL typography_heading04__PFAbm basic_card_title__bUXi6">Subscribe for updates</p><p class="typography_paragraph02__wtIHI basic_card_text__CofVC">Build better digital experiences with Contentful updates direct to your inbox.</p></div><div class="round_icon_container__Jmlwp card_wrapper_icon__OMF4u"><span class="icon_icon__Lg8DM icon_icon12___AHTU"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 13 12"><path fill="#fff" d="M1 5a1 1 0 000 2V5zm11 0H1v2h11V5z"/><path stroke="#fff" stroke-linecap="round" stroke-width="2" d="M7 11l4.617-4.617a.5.5 0 000-.707L7 1.058"/></svg></span></div></div></div></div><section class="blog_detail_mobileDivider__M4b83"><div class="main-grid"><div class="with_divider_divider__CMQw1 col-span-full"/></div></section><div class="blog_detail_tagSocialWrapper__lAUI5"><div><a class="blog_detail_tag__SCsxr" href="/blog/tag/how-to/">How-to</a><a class="blog_detail_tag__SCsxr" href="/blog/tag/front-end/">Front end</a></div><div class="social_share_socialShare__nmfNB"><button data-tooltip-id="copy-url-tooltip"><span class="icon_icon__Lg8DM"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 25"><path fill="#000" d="M16.5 15.38a3.739 3.739 0 00-2.683 1.133l-4.322-2.777c.34-.872.34-1.84 0-2.712l4.322-2.777a3.75 3.75 0 10-.812-1.261L8.683 9.763a3.75 3.75 0 100 5.233l4.322 2.778A3.75 3.75 0 1016.5 15.38zm0-12a2.25 2.25 0 110 4.5 2.25 2.25 0 010-4.5zM6 14.63a2.25 2.25 0 110-4.5 2.25 2.25 0 010 4.5zm10.5 6.75a2.25 2.25 0 110-4.5 2.25 2.25 0 010 4.5z"/></svg></span></button><button data-track="Click - Link" data-track-label="Share Link - Facebook" aria-label="Share Link on Facebook" class="react-share__ShareButton" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><span class="icon_icon__Lg8DM"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 256 256"><path d="M216 24H40a16 16 0 00-16 16v176a16 16 0 0016 16h176a16 16 0 0016-16V40a16 16 0 00-16-16zm0 192H40V40h176v176zM96 112v64a8 8 0 01-16 0v-64a8 8 0 0116 0zm88 28v36a8 8 0 01-16 0v-36a20 20 0 00-40 0v36a8 8 0 01-16 0v-64a8 8 0 0115.79-1.78A36 36 0 01184 140zm-84-56a12 12 0 11-12-12 12 12 0 0112 12z"/></svg></span></button><button data-track="Click - Link" data-track-label="Share Link - Facebook" aria-label="Share Link on Facebook" class="react-share__ShareButton" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><span class="icon_icon__Lg8DM"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 256 256"><path d="M128 24a104 104 0 10104 104A104.11 104.11 0 00128 24zm8 191.63V152h24a8 8 0 000-16h-24v-24a16 16 0 0116-16h16a8 8 0 000-16h-16a32 32 0 00-32 32v24H96a8 8 0 000 16h24v63.63a88 88 0 1116 0z"/></svg></span></button><button data-track="Click - Link" data-track-label="Share Link - Facebook" aria-label="Share Link on Facebook" class="react-share__ShareButton" style="background-color:transparent;border:none;padding:0;font:inherit;color:inherit;cursor:pointer"><span class="icon_icon__Lg8DM"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 256 256"><path d="M214.75 211.71l-62.6-98.38 61.77-67.95a8 8 0 00-11.84-10.76l-58.84 64.72-40.49-63.63A8 8 0 0096 32H48a8 8 0 00-6.75 12.3l62.6 98.37-61.77 68a8 8 0 1011.84 10.76l58.84-64.72 40.49 63.63A8 8 0 00160 224h48a8 8 0 006.75-12.29zM164.39 208L62.57 48h29l101.86 160z"/></svg></span></button><div class="tooltip_root__EulUk"/></div></div></section></div><div class="col-span-full lg:col-span-9 lg:col-start-4"><div class="cards_blog_authorsCardsWrapper__PJ_hU"><div class="cards_blog_authorSingle__gPC1v"><a class="cards_blog_authorLink__5PAuM" href="/blog/author/stefan-judis/"><div class="speaker_root__GMnCq"><div class="speaker_speaker___L9tm"><div class="speaker_imageBadgeWrapper__RVD8Y"><div class="speaker_imageWrapper__2Yy7F"><img alt="Stefan Judis" loading="lazy" width="550" height="550" decoding="async" data-nimg="1" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=640&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=1200&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/2tPBIY5ibOS8eCe0cEY4eU/0ac3d0a75277efa0288a9504cbb5ddfb/stefanjudis.jpg?fm=webp&w=1200&q=100"/></div></div><div class="speaker_info__F2jth"><h4 class="typography_heading__msTWL typography_heading04__PFAbm speaker_name__Mawtx">Stefan<!-- --> <!-- -->Judis</h4><p class="typography_label__20rrV typography_label02__ss7ok speaker_role__kOMlB">Senior Manager of Developer Relations</p><p class="typography_label__20rrV typography_label02__ss7ok"/></div></div><p class="typography_paragraph02__wtIHI speaker_intro__2YTbb speaker_introClamped__ysi4z">Stefan loves web performance, new technologies, and accessibility. He is also a curator of the online resource [Tiny Helpers](https://tiny-helpers.dev/ "Tiny Helpers"), contributes to a variety of [open source projects](https://github.com/stefanjudis "open source projects"), and enjoys [sharing nerdy discoveries](https://www.stefanjudis.com/today-i-learned/ "Today I Learned").</p><button class="speaker_showButton__S_QPU">See more</button></div></a></div></div></div></div><div class="section_group_root__WDYiQ"><div class="main-grid"><div class="with_divider_divider__CMQw1 col-span-full"/></div></div><section class="main-grid blog_detail_relatedArticlesContainer__DhSyy"><h2 class="typography_heading__msTWL typography_heading02__uof_Q col-span-full blog_detail_relatedArticlesTitle__UWV02">Related articles</h2><a class="card_wrapper_root__OsMtq card_with_image_cardWrapper__TmSV_ col-span-full lg:col-span-4 blog_detail_card__UIkQz" href="/blog/understated-potential-static-site-generators/"><div class="card_with_image_imageWrapper__xu2g7"><img alt="" fetchpriority="high" width="0" height="0" decoding="async" data-nimg="1" class="card_with_image_image__RdLG7 card_with_image_imageWide__QiZhS" style="color:transparent;width:100%;height:auto" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/7gaObMiwo0eqUOYs4gYsI8/e74bb796e13035205fcedd2f1f6fde4a/20180716_potential_static_site_generators.png?fm=webp&w=3840&q=100"/></div><div class="card_with_image_eyebrow__qKRYT"><span class="typography_label__20rrV typography_label02__ss7ok">Guides</span></div><p class="typography_heading__msTWL typography_heading04__PFAbm card_with_image_title__iAi68">The understated innovation of static site generators</p><p class="typography_paragraph02__wtIHI card_with_image_description__oFVwV">July 17, 2018</p></a><a class="card_wrapper_root__OsMtq card_with_image_cardWrapper__TmSV_ col-span-full lg:col-span-4 blog_detail_card__UIkQz" href="/blog/deserializing-json-in-swift-5-and-contentful/"><div class="card_with_image_imageWrapper__xu2g7"><img alt="Let's explore how to use Swift 5 to process JSON data, and learn how to make requests to Contentful APIs and deserialize the data to render the results." fetchpriority="high" width="0" height="0" decoding="async" data-nimg="1" class="card_with_image_image__RdLG7 card_with_image_imageWide__QiZhS" style="color:transparent;width:100%;height:auto" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/3nRHlIT21ifcNPKl2OprbJ/57a91832a03621d52d5b255221de740c/2022-11_Deserializing_JSON_in_Swift.png?fm=webp&w=3840&q=100"/></div><div class="card_with_image_eyebrow__qKRYT"><span class="typography_label__20rrV typography_label02__ss7ok">Guides</span></div><p class="typography_heading__msTWL typography_heading04__PFAbm card_with_image_title__iAi68">Deserializing JSON in Swift 5 and Contentful</p><p class="typography_paragraph02__wtIHI card_with_image_description__oFVwV">November 24, 2022</p></a><a class="card_wrapper_root__OsMtq card_with_image_cardWrapper__TmSV_ col-span-full lg:col-span-4 blog_detail_card__UIkQz" href="/blog/redux-tutorial/"><div class="card_with_image_imageWrapper__xu2g7"><img alt="How to use Redux to manage application state and data-fetching logic in a React project, and how to apply these techniques to data coming from Contentful." fetchpriority="high" width="0" height="0" decoding="async" data-nimg="1" class="card_with_image_image__RdLG7 card_with_image_imageWide__QiZhS" style="color:transparent;width:100%;height:auto" sizes="100vw" srcset="https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=640&q=100 640w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=750&q=100 750w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=828&q=100 828w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=1080&q=100 1080w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=1200&q=100 1200w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=1920&q=100 1920w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=2048&q=100 2048w, https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=3840&q=100 3840w" src="https://images.ctfassets.net/fo9twyrwpveg/3WGgGii9rxXxeVG9cOGsOb/0f03554c148cb3a2bb028766e7aaf443/2023-03_getting_started_with_redux.jpg?fm=webp&w=3840&q=100"/></div><div class="card_with_image_eyebrow__qKRYT"><span class="typography_label__20rrV typography_label02__ss7ok">Guides</span></div><p class="typography_heading__msTWL typography_heading04__PFAbm card_with_image_title__iAi68">Redux tutorial with Contentful</p><p class="typography_paragraph02__wtIHI card_with_image_description__oFVwV">April 7, 2023</p></a></section><div class="section_group_root__WDYiQ"><div class="main-grid"><section class="col-span-9 lg:col-span-full blog_promo_card_verticalBottom__G0jxU blog_promo_card_verticalTop__d5Xun"><div class="promo_card_root__4nRXA"><img alt="Contentful Logo 2.5 Dark" loading="lazy" width="80" height="80" decoding="async" data-nimg="1" class="promo_card_image___AOAM promo_card_logo__zvcwm" style="color:transparent" srcset="https://images.ctfassets.net/fo9twyrwpveg/OzuoZJxKgQooeO7nD8PVu/13223440bedfaceb8560d3dd873d3783/Favicon-01.svg?w=96&q=100 1x, https://images.ctfassets.net/fo9twyrwpveg/OzuoZJxKgQooeO7nD8PVu/13223440bedfaceb8560d3dd873d3783/Favicon-01.svg?w=256&q=100 2x" src="https://images.ctfassets.net/fo9twyrwpveg/OzuoZJxKgQooeO7nD8PVu/13223440bedfaceb8560d3dd873d3783/Favicon-01.svg?w=256&q=100"/><div class="promo_card_content__xI52l"><div class="promo_card_text__9U42_"><p class="typography_heading__msTWL typography_heading04__PFAbm promo_card_heading__Sh1Ld">Ready to start building? </p><p class="typography_paragraph02__wtIHI">Put everything you learned into action. Create and publish your content with Contentful — no credit card required.</p></div><a class="promo_card_link__esHk9" href="/get-started/"><div class="button_markup_root__sACGr button_markup_secondary__F_qxS button_markup_large__WxGn3"><span class="typography_label__20rrV typography_label02__ss7ok">Get started</span></div></a></div></div></section></div></div></main><footer class="footer_root__Hp5Dq main-grid"><div class="col-span-full"><div class="footer_mobile__0H8K2"><div class="footer_section__5hXz0"><button class="footer_accordionButton__Jq3KR" aria-expanded="false" aria-controls="footer-panel-0" id="footer-header-0"><span class="typography_label__20rrV typography_label02__ss7ok footer_sectionTitle__fa0ao">Product</span><span class="icon_icon__Lg8DM icon_icon12___AHTU footer_accordionIcon__Vvhtt"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 12 12"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.533 4l5 5 5-5"/></svg></span></button><div id="footer-panel-0" role="region" aria-labelledby="footer-header-0"><div aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div class="footer_accordionContent__ahswH" style="transition:opacity 400ms ease 0ms;-webkit-transition:opacity 400ms ease 0ms;opacity:0"><a class="footer_accordionItem__ySRrH" href="/products/"><p class="typography_paragraph03__hcta_">What is Contentful?</p></a><a class="footer_accordionItem__ySRrH" href="/use-cases/"><p class="typography_paragraph03__hcta_">Use Cases</p></a><a class="footer_accordionItem__ySRrH" href="/headless-cms/"><p class="typography_paragraph03__hcta_">What is headless CMS?</p></a><a class="footer_accordionItem__ySRrH" href="/composable-content/"><p class="typography_paragraph03__hcta_">What is composable content?</p></a><a class="footer_accordionItem__ySRrH" href="/whats-new/"><p class="typography_paragraph03__hcta_">What's New</p></a><a class="footer_accordionItem__ySRrH" href="/pricing/"><p class="typography_paragraph03__hcta_">Pricing</p></a></div></div></div></div><div class="footer_section__5hXz0"><button class="footer_accordionButton__Jq3KR" aria-expanded="false" aria-controls="footer-panel-1" id="footer-header-1"><span class="typography_label__20rrV typography_label02__ss7ok footer_sectionTitle__fa0ao">Docs & Help</span><span class="icon_icon__Lg8DM icon_icon12___AHTU footer_accordionIcon__Vvhtt"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 12 12"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.533 4l5 5 5-5"/></svg></span></button><div id="footer-panel-1" role="region" aria-labelledby="footer-header-1"><div aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div class="footer_accordionContent__ahswH" style="transition:opacity 400ms ease 0ms;-webkit-transition:opacity 400ms ease 0ms;opacity:0"><a class="footer_accordionItem__ySRrH" href="/developers/docs/"><p class="typography_paragraph03__hcta_">Documentation</p></a><a class="footer_accordionItem__ySRrH" href="https://training.contentful.com/"><p class="typography_paragraph03__hcta_">Training</p></a><a class="footer_accordionItem__ySRrH" href="/professional-services/"><p class="typography_paragraph03__hcta_">Professional services</p></a><a class="footer_accordionItem__ySRrH" href="https://www.contentfulstatus.com/"><p class="typography_paragraph03__hcta_">System status</p></a><a class="footer_accordionItem__ySRrH" href="/faq/"><p class="typography_paragraph03__hcta_">FAQs</p></a><a class="footer_accordionItem__ySRrH" href="/help/"><p class="typography_paragraph03__hcta_">Help Center</p></a><a class="footer_accordionItem__ySRrH" href="/developers/showcase/"><p class="typography_paragraph03__hcta_">Developer Showcase</p></a></div></div></div></div><div class="footer_section__5hXz0"><button class="footer_accordionButton__Jq3KR" aria-expanded="false" aria-controls="footer-panel-2" id="footer-header-2"><span class="typography_label__20rrV typography_label02__ss7ok footer_sectionTitle__fa0ao">About us</span><span class="icon_icon__Lg8DM icon_icon12___AHTU footer_accordionIcon__Vvhtt"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 12 12"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.533 4l5 5 5-5"/></svg></span></button><div id="footer-panel-2" role="region" aria-labelledby="footer-header-2"><div aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div class="footer_accordionContent__ahswH" style="transition:opacity 400ms ease 0ms;-webkit-transition:opacity 400ms ease 0ms;opacity:0"><a class="footer_accordionItem__ySRrH" href="/about-us/"><p class="typography_paragraph03__hcta_">About us</p></a><a class="footer_accordionItem__ySRrH" href="/careers/"><p class="typography_paragraph03__hcta_">Careers</p></a><a class="footer_accordionItem__ySRrH" href="/leadership/"><p class="typography_paragraph03__hcta_">Leadership</p></a><a class="footer_accordionItem__ySRrH" href="/blog/"><p class="typography_paragraph03__hcta_">Blog</p></a><a class="footer_accordionItem__ySRrH" href="/events/"><p class="typography_paragraph03__hcta_">Events</p></a><a class="footer_accordionItem__ySRrH" href="/newsroom/"><p class="typography_paragraph03__hcta_">Newsroom</p></a></div></div></div></div><div class="footer_section__5hXz0"><button class="footer_accordionButton__Jq3KR" aria-expanded="false" aria-controls="footer-panel-3" id="footer-header-3"><span class="typography_label__20rrV typography_label02__ss7ok footer_sectionTitle__fa0ao">Get in touch</span><span class="icon_icon__Lg8DM icon_icon12___AHTU footer_accordionIcon__Vvhtt"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 12 12"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.533 4l5 5 5-5"/></svg></span></button><div id="footer-panel-3" role="region" aria-labelledby="footer-header-3"><div aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div class="footer_accordionContent__ahswH" style="transition:opacity 400ms ease 0ms;-webkit-transition:opacity 400ms ease 0ms;opacity:0"><a class="footer_accordionItem__ySRrH" href="/contact/"><p class="typography_paragraph03__hcta_">Contact</p></a><a class="footer_accordionItem__ySRrH" href="/support/"><p class="typography_paragraph03__hcta_">Support</p></a><a class="footer_accordionItem__ySRrH" href="/partners/"><p class="typography_paragraph03__hcta_">Partners</p></a><a class="footer_accordionItem__ySRrH" href="/researchpanel/"><p class="typography_paragraph03__hcta_">Join research panel</p></a></div></div></div></div><div class="footer_section__5hXz0"><button class="footer_accordionButton__Jq3KR" aria-expanded="false" aria-controls="footer-panel-4" id="footer-header-4"><span class="typography_label__20rrV typography_label02__ss7ok footer_sectionTitle__fa0ao">Connect</span><span class="icon_icon__Lg8DM icon_icon12___AHTU footer_accordionIcon__Vvhtt"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 12 12"><path stroke="#2B2D31" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1.533 4l5 5 5-5"/></svg></span></button><div id="footer-panel-4" role="region" aria-labelledby="footer-header-4"><div aria-hidden="true" class="rah-static rah-static--height-zero " style="height:0;overflow:hidden"><div class="footer_accordionContent__ahswH" style="transition:opacity 400ms ease 0ms;-webkit-transition:opacity 400ms ease 0ms;opacity:0"><a class="footer_accordionItem__ySRrH" href="https://github.com/contentful"><p class="typography_paragraph03__hcta_">Github</p></a><a class="footer_accordionItem__ySRrH" href="/discord/"><p class="typography_paragraph03__hcta_">Discord</p></a><a class="footer_accordionItem__ySRrH" href="https://twitter.com/contentful"><p class="typography_paragraph03__hcta_">Twitter</p></a><a class="footer_accordionItem__ySRrH" href="https://www.youtube.com/c/Contentfulinc"><p class="typography_paragraph03__hcta_">Youtube</p></a><a class="footer_accordionItem__ySRrH" href="https://www.linkedin.com/company/contentful"><p class="typography_paragraph03__hcta_">LinkedIn</p></a></div></div></div></div></div><div class="footer_desktop__hva9c"><div class="footer_section__5hXz0"><span class="typography_label__20rrV typography_label03__WZ6Pz footer_sectionTitle__fa0ao">Product</span><ul><li><a class="footer_link__bkRpI" href="/products/"><p class="typography_paragraph03__hcta_">What is Contentful?</p></a></li><li><a class="footer_link__bkRpI" href="/use-cases/"><p class="typography_paragraph03__hcta_">Use Cases</p></a></li><li><a class="footer_link__bkRpI" href="/headless-cms/"><p class="typography_paragraph03__hcta_">What is headless CMS?</p></a></li><li><a class="footer_link__bkRpI" href="/composable-content/"><p class="typography_paragraph03__hcta_">What is composable content?</p></a></li><li><a class="footer_link__bkRpI" href="/whats-new/"><p class="typography_paragraph03__hcta_">What's New</p></a></li><li><a class="footer_link__bkRpI" href="/pricing/"><p class="typography_paragraph03__hcta_">Pricing</p></a></li></ul></div><div class="footer_section__5hXz0"><span class="typography_label__20rrV typography_label03__WZ6Pz footer_sectionTitle__fa0ao">Docs & Help</span><ul><li><a class="footer_link__bkRpI" href="/developers/docs/"><p class="typography_paragraph03__hcta_">Documentation</p></a></li><li><a class="footer_link__bkRpI" href="https://training.contentful.com/"><p class="typography_paragraph03__hcta_">Training</p></a></li><li><a class="footer_link__bkRpI" href="/professional-services/"><p class="typography_paragraph03__hcta_">Professional services</p></a></li><li><a class="footer_link__bkRpI" href="https://www.contentfulstatus.com/"><p class="typography_paragraph03__hcta_">System status</p></a></li><li><a class="footer_link__bkRpI" href="/faq/"><p class="typography_paragraph03__hcta_">FAQs</p></a></li><li><a class="footer_link__bkRpI" href="/help/"><p class="typography_paragraph03__hcta_">Help Center</p></a></li><li><a class="footer_link__bkRpI" href="/developers/showcase/"><p class="typography_paragraph03__hcta_">Developer Showcase</p></a></li></ul></div><div class="footer_section__5hXz0"><span class="typography_label__20rrV typography_label03__WZ6Pz footer_sectionTitle__fa0ao">About us</span><ul><li><a class="footer_link__bkRpI" href="/about-us/"><p class="typography_paragraph03__hcta_">About us</p></a></li><li><a class="footer_link__bkRpI" href="/careers/"><p class="typography_paragraph03__hcta_">Careers</p></a></li><li><a class="footer_link__bkRpI" href="/leadership/"><p class="typography_paragraph03__hcta_">Leadership</p></a></li><li><a class="footer_link__bkRpI" href="/blog/"><p class="typography_paragraph03__hcta_">Blog</p></a></li><li><a class="footer_link__bkRpI" href="/events/"><p class="typography_paragraph03__hcta_">Events</p></a></li><li><a class="footer_link__bkRpI" href="/newsroom/"><p class="typography_paragraph03__hcta_">Newsroom</p></a></li></ul></div><div class="footer_section__5hXz0"><span class="typography_label__20rrV typography_label03__WZ6Pz footer_sectionTitle__fa0ao">Get in touch</span><ul><li><a class="footer_link__bkRpI" href="/contact/"><p class="typography_paragraph03__hcta_">Contact</p></a></li><li><a class="footer_link__bkRpI" href="/support/"><p class="typography_paragraph03__hcta_">Support</p></a></li><li><a class="footer_link__bkRpI" href="/partners/"><p class="typography_paragraph03__hcta_">Partners</p></a></li><li><a class="footer_link__bkRpI" href="/researchpanel/"><p class="typography_paragraph03__hcta_">Join research panel</p></a></li></ul></div><div class="footer_section__5hXz0"><span class="typography_label__20rrV typography_label03__WZ6Pz footer_sectionTitle__fa0ao">Connect</span><ul><li><a class="footer_link__bkRpI" href="https://github.com/contentful"><p class="typography_paragraph03__hcta_">Github</p></a></li><li><a class="footer_link__bkRpI" href="/discord/"><p class="typography_paragraph03__hcta_">Discord</p></a></li><li><a class="footer_link__bkRpI" href="https://twitter.com/contentful"><p class="typography_paragraph03__hcta_">Twitter</p></a></li><li><a class="footer_link__bkRpI" href="https://www.youtube.com/c/Contentfulinc"><p class="typography_paragraph03__hcta_">Youtube</p></a></li><li><a class="footer_link__bkRpI" href="https://www.linkedin.com/company/contentful"><p class="typography_paragraph03__hcta_">LinkedIn</p></a></li></ul></div></div><ul class="footer_bottom__9Gmhk"><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="/legal/"><p class="typography_paragraph03__hcta_">Imprint/Legal</p></a><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="/legal/privacy-at-contentful/privacy-notice/"><p class="typography_paragraph03__hcta_">Privacy</p></a><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="/legal/privacy-at-contentful/your-privacy-choices/"><span class="icon_icon__Lg8DM footer_icon__qVGhl"><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 30 14"><path fill="#fff" fill-rule="evenodd" d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" clip-rule="evenodd"/><path fill="#06f" fill-rule="evenodd" d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" clip-rule="evenodd"/><path fill="#fff" d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z"/><path fill="#06f" d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z"/></svg></span><p class="typography_paragraph03__hcta_">Your Privacy Choices</p></a><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="/security/"><p class="typography_paragraph03__hcta_">Security</p></a><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="https://be.contentful.com/login/"><p class="typography_paragraph03__hcta_">Log in</p></a><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><button class="footer_secondaryLink__rcNz_"><p class="typography_paragraph03__hcta_">Cookie Preferences</p></button><div class="footer_separator__eu_KH"/></li><li class="footer_itemSecondary__aWxCL"><a class="footer_secondaryLink__rcNz_" href="/sitemap/"><p class="typography_paragraph03__hcta_">Sitemap</p></a><div class="footer_separator__eu_KH"/></li></ul><p class="typography_paragraph03__hcta_ footer_copyright___xzDR">© 2024 Contentful. All rights reserved.</p></div></footer></div><!--$!--><template data-dgst="NEXT_DYNAMIC_NO_SSR_CODE"/><!--/$--></body>
推荐文章
力能扛鼎的饭卡
·
【上海业务资深培训师招聘网_2024年上海业务资深培训师招聘信息】-上海猎聘
5 月前
文质彬彬的大象
·
如何“复制”下一个王心凌?丨创创锦囊_长江商学院独角兽加速项目
6 月前
怕老婆的红茶
·
使用document.execCommand ("SaveAs")造成網頁重載 - JavaScript 討論 - jsGears.com 技術論壇 - AJAX, JavaScript, jQue
6 月前
眼睛小的消防车
·
“代表通道”直击⑫丨肖尊湖:造出更多更好更先进的钢-湖南省人民政府门户网站
7 月前
礼貌的消防车
·
写生二十年 | 艺术家石俊:真诚是艺术创作的生命 - 武汉美术馆 - 崇真艺客
1 年前