Creating a function to refresh the cart after checkout.
Integrating Storyblock with Shopify for a richer e-commerce experience.
Building a Shopify Gatsby website with a headless CMS approach.
Leveraging GraphQL to fetch and manage Shopify data in Gatsby.
Developing e-commerce components with a focus on user experience.
Creating a dynamic and efficient e-commerce platform involves a seamless blend of front-end and back-end technologies. Here, we explore the process of building a Shopify Gatsby website, enhanced with Storyblock, a headless content management system (CMS). This integration allows for a flexible and content-rich shopping experience, leveraging the power of GraphQL and modern web technologies.
One of the primary steps in this process is addressing the functionality of the shopping cart. After a successful checkout, it's crucial to refresh the cart to reflect the accurate status of purchased items. This involves creating a function to generate a new checkout ID and updating the local storage accordingly. The process ensures that upon completion of a checkout, the cart is emptied, maintaining a clean and user-friendly experience.
Integrating Storyblock with Shopify enhances the platform by allowing storytelling elements and dynamic content to coexist with product data. This integration requires setting up Storyblock components and using its visual editor to manage content effectively. Although there might be challenges such as plugin requirements or account access, solutions are available to overcome these hurdles, ensuring smooth integration.
The foundation of this e-commerce solution is a headless Shopify Gatsby website. This architecture allows for a decoupled front-end and back-end, providing flexibility and scalability. Components like a hero image, product grid, and rich text are managed within Storyblock, offering a visual editing experience that updates in real-time. The ability to preview changes instantly is invaluable for content creators aiming to keep the site engaging and up-to-date.
GraphQL plays a significant role in managing and fetching data from Shopify. By establishing connections between Gatsby and Shopify, data such as products and collections are queried and displayed efficiently. This setup supports the creation of collection pages, product cards, and single product views, each tailored to enhance the shopping experience.
Developing e-commerce components involves not just displaying products but also ensuring a seamless checkout process. This includes creating and managing context for the shopping cart, adding products, and handling the checkout state. Ensuring that the cart persists even after page reloads is crucial for maintaining the user journey.
Adding Storyblock components to the site introduces a new dimension of content management. Through the use of static queries and rich text rendering, components are dynamically populated with content from the CMS. This approach allows for a blend of static data from Shopify and dynamic content from Storyblock, creating a comprehensive shopping platform.
In conclusion, the integration of Shopify, Gatsby, and Storyblock offers a robust solution for building a modern e-commerce site. By leveraging the strengths of each platform, developers can create a site that is not only functional but also engaging and easy to manage. As e-commerce continues to evolve, such integrations will play a crucial role in delivering rich and interactive shopping experiences.
This workshop has been presented at React Advanced 2022, check out the latest edition of this React Conference.
FAQ
The main objective of the workshop is to build a complete Shopify Gatsby website integrated with Storyblocks, demonstrating how to create a headless CMS setup and enrich e-commerce with storytelling content.
Participants should clone the provided repository, switch to the main branch, and use YARN to register all the packages. They are also advised to follow the progression by branches as the workshop advances.
The technologies integrated in the Shopify Gatsby website include Shopify for e-commerce functionality, Gatsby as the static site generator, and Storyblocks for adding headless CMS capabilities.
The initial components created include a layout component in Gatsby, a simple header using Gatsby's link component, and a cart icon linked to the cart page.
Storyblock components are used to pull dynamic content like hero and text components from Storyblocks, while product-related information is pulled from Shopify. This demonstrates the blend of e-commerce and CMS functionalities.
Participants will learn to create product cards and collection pages using Gatsby's APIs, integrating these with Shopify's product data to display and manage products effectively.
Data fetching from Shopify is handled through the Gatsby Shopify source plugin, allowing participants to pull product and collection data directly into their Gatsby site.
Yes, participants are encouraged to interact directly with the instructor. The instructor prefers real-time interaction over chat and participants are urged to open their mics and speak up during the session.
The workshop covers creating a context for the shopping cart, adding products to the cart, managing checkout processes, and integrating with Shopify's API for a complete e-commerce experience.
We will build a complete Shopify Gatsby website that integrates e-commerce with storytelling and content from a headless CMS. We connect Gatsby and Shopify, create collections and single products, and build a menu and shopping cart. We also integrate Storyblock CMS with a real-time visual editor and troubleshoot any issues. The workshop covers building e-commerce components, including single products, category grids, and best sellers. Overall, the workshop provides a comprehensive guide to building a Shopify Gatsby website with various functionalities.
We are going to build a complete Shopify Gatsby website headless. The homepage will integrate e-commerce with storytelling and content from the headless CMS, Storyblocks. We will build catalogs, collections, shopping cart, checkout process, and integrate with Storyblock components. Clone the repository, install the packages, and progress by branches.
2. Setting up Gatsby Eats and Connecting Shopify
We have just created the essential components for the Gatsby Eats website, including the global layout, header, card page, and homepage. We have also set up the Gatsby config and installed the necessary plugins. I have provided documentation on setting up a Shopify shop and shared the variables for this workshop. In the next step, we will connect Gatsby and Shopify by installing the Gatsby Shopify source plugin and adding the required code to Gatsby configure. Let me know if you encounter any issues.
3. Creating Collections with Gatsby
We are going to create collections using the create page API from Gatsby. We will use the templates and collections, make a page query, and get the handles. Then we filter the collection, map around it, and paginate the context. The handle is used to filter our pages by the handle.
4. Creating Collections and Single Products
We filter our products by collections and handle, and paginate them with a limit of 50 items per page. We create an optimized image component using Gatsby Plugin Image and Gatsby Image Data. The product card component displays the title, handle, variant, feature, and image. We add the product card to the collection templates and correct Tailwind. Next, we create single products using the file system with API method. We filter the Shopify products by handle and query the necessary data. Finally, we build the single product using the title, description, variants, featured image, and price.
5. Creating Menu and Shopping Cart
We are going to create the menu from the collection using gadgets that allow you to query data statically at the component level. We will use the Gatsby GraphQL static query to get the handle and title from all the Shopify Collections. Then, we will filter the collections to remove the front page collection and map around the remaining collections to create links. We may encounter an error, but we will troubleshoot it. Next, we will move on to part two, where we will create the shopping cart and checkout process by building context and adding functions to add and remove products from the cart.
6. Creating Context and Initializing Checkout
In this branch, we create a context and a store provider. We test the add to cart function and confirm that it works. Next, we install Shopify by using yarn. Then, we initialize the checkout state and create the initialize checkout constant. We modify the add to cart function and create a client with the store URL and storefront access token. Finally, we create a buy now button that opens a new window with the checkout for the product.
7. Testing Checkout and Buy Now Button
We query the variant Shopify ID and pass it to the product cart. We test the functionality and open the new checkout for the page. The Buy Now button works, and we have a console log for the new checkout. Let me know if you have questions.
8. Making Card Persistent and Creating Shopping Cart
We make the card persistent by checking if a checkout exists in the local storage. If it does, we fetch it from Shopify; otherwise, we create a new checkout and add it to the local storage. We also add the 'Add to cart' button to the single product. Next, we create the shopping cart page, where we display the cart items, the checkout total price, and the number of items in the cart. We also add a shopping cart icon to the header. Please note that there may be a slight delay when adding items to the cart, so it's recommended to include a loader in a real-world application.
QnA
Testing Checkout and RemoveFromCart
If I add the product to cart, it appears in the cart. The RemoveFromCart function is created to remove items from the cart. We test the checkout process and make a real checkout to see if it works. I have a question about the GitHub URL.
Refreshing Cart and Adding Storyblock
We continue to shipping and payment using the bogus gateway. However, our shopping cart is not empty after the checkout, which is a problem we need to fix. We create a function to refresh the cart after the checkout. In our store context, we create a new ID function to generate a new checkout ID. If the current checkout exists, we fetch it from Shopify. Otherwise, we create a new one and add it to the local storage. Now our cart is empty again. Next, we will add Storyblock to the shop, but there is a problem with the Shopify plugin. Alba has found a solution, and you will be able to test it yourself. For now, I will show you how everything works, and you can redo it using the provided script.
Connecting Storyblock and Configuring Proxy
On branch 12, connect Storyblock by signing up or logging into the Storyblock website and creating a new space. Obtain the access token and install the Gatsby source storyblock plugin. Restart Gatsby to establish the connection. Access GraphQL to view the storyblock entry nodes and their content. To connect the repository and Storyblock, add the Development Server to Storyblock's Visual Editor. Install and run the proxy to enable HTTPS for Storyblock version two. Troubleshoot any issues with the proxy.
Creating Storyblock Components
We are going to create Storyblock components, including a rich text component and a hero component. These components will be rendered using the Storyblock rich text react renderer and the Storyblock editable feature. This will allow us to click on a component and edit it in real time within the Storyblock Visual Editor.
Building Storyblock Components
We create components using a block field that allows us to nest other components and blocks. The hero field contains a headline, text area, and image. The text field uses a rich text component, while the product component connects to the Shopify plugin. We can select products or categories and set limits. The product grid displays six products, and the category grid shows only categories. We wrap the hero in a storyblock editable component and use the render function for the text component. We initialize the storyblock API in the global layout component and create the home page using a page query for the slug home. We can now see and drag and drop our components.
Using Storyblock CMS with Real-Time Visual Editor
We can use easy storyblock, editable, etc. If I click here, I can edit it in real time. I console.log the story, so you are going to be able to see what we have here. Here's a story, the contents, the body, because the component here is named body in the page. And you can see here we have our two components, the hero and the text. And in this hero, we have the description, the headline, the image, and here we have the long text. Component with this content, you see we have heading, paragraphs, so it's the render function that we have seen is going to dispersing this. We create this variable components from a story content body and we map around this components that we are seeing the content log and we render this storyblock component passing the block and the block QID and this storyblock component is going to handle the conditional display of this component if they exist. And then I display my components here. So here we have the layout, here we have the page and with that everything works. Do you have any questions? There is not a kind of CMS, it's a CMS, it's a headless CMS with real time visual editor is only one that is with time visual editor so let me know if you have other questions about the storybook. You can speak, it's easier for me reading.
Building E-commerce Components and Troubleshooting
I will show you how to build e-commerce components, including a single product component and a category grid. You can browse collections, select categories, and see real-time changes. You can also focus on specific products, edit them, and customize the layout. Additionally, you can showcase best sellers using the product group component. Remember to save and refresh the data to see the changes. Let's restart Gatsby and reload the page to resolve any issues.
Building Product and Category Components
Here, we have the single product component, which pulls data from both Storyblock and Shopify. The product grid component also retrieves data from Shopify to display products and allows users to add items to the cart. The category grid component pulls data from Shopify to display categories. We use static queries to fetch the necessary data. The components are built using the retrieved data, including the handle, variant, price, and Shopify ID. We also create collections using the handle and image from Shopify. If you have any questions, please let me know.
Adding Storyblock and Connecting
Part 3 is about adding Storyblock and connecting it. The speaker encourages questions and reviews from the audience. They mention being available at the Storyblock booth, playing Tetris, and clarifying the difference between Storyblock and Storybook. The speaker expresses gratitude and invites the audience to enjoy the conference and use their tool.
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up). Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too. Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step. (Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?
There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.
Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.
The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.
React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning? In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests. Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
This Talk is about interactive data visualization in React using the Plot library. Plot is a high-level library that simplifies the process of visualizing data by providing key concepts and defaults for layout decisions. It can be integrated with React using hooks like useRef and useEffect. Plot allows for customization and supports features like sorting and adding additional marks. The Talk also discusses accessibility concerns, SSR support, and compares Plot to other libraries like D3 and Vega-Lite.
Comments