{"id":14153,"date":"2025-07-30T10:05:36","date_gmt":"2025-07-30T07:05:36","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=14153"},"modified":"2025-11-05T13:44:48","modified_gmt":"2025-11-05T10:44:48","slug":"meet-new-dhtmlx-react-scheduler","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/meet-new-dhtmlx-react-scheduler\/","title":{"rendered":"New DHTMLX React Scheduler for Modern Stacks with Redux, TypeScript, and MUI Support"},"content":{"rendered":"<p>React developers, we heard you! Following the enthusiastic reception of our React Gantt chart, we are thrilled to announce the release of DHTMLX <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler-for-React\/\" rel=\"noopener\" target=\"_blank\">React Scheduler<\/a>! This novelty brings the full power of our time-proven JavaScript Scheduler to the React ecosystem. In this release article, we&#8217;ll introduce its core capabilities and show how it fits into your React stack.<\/p>\n\n\t\t<div class='post-banner'>\n\t\t    <div class='post-banner__inside'>\n\t\t        <div>\n\t\t            <div class=\"post-banner__title\">Download DHTMLX React Scheduler<\/div>\n\t\t            <div class=\"post-banner__text\">Integrate a comprehensive scheduling calendar in React projects with ease<\/div>\n                <\/div>\n\t\t            \n                \n            <div class='post-banner__btn'>\n                <a href='https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler-for-React\/download.shtml' title='' class='button-secondary'>Get free trial<\/a>\n            <\/div>\n        \n            <\/div>\n\t\t<\/div>\n\t\n<h5>What to Expect from DHTMLX React Scheduler<\/h5>\n<p>The decision to release the new Scheduler solution comes in response to a strong demand for advanced scheduling functionalities that can be seamlessly integrated into modern React applications.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image1.png\" alt=\"React Scheduler built with DHTMLX\" width=\"1552\" height=\"827\" class=\"aligncenter size-full wp-image-14162\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image1.png 1552w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image1-300x160.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image1-768x409.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image1-1024x546.png 1024w\" sizes=\"auto, (max-width: 1552px) 100vw, 1552px\" \/><\/p>\n<p>Just like its <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxGantt-for-React\/\" rel=\"noopener\" target=\"_blank\">React Gantt<\/a> counterpart, the new Scheduler is optimized for the latest React versions (starting from v18), thereby allowing you to benefit from the latest React features and performance optimizations. This approach will make it easier for your team to enhance and maintain the scheduling app as requirements evolve.<\/p>\n<p>Now, it is time to explore what exactly makes DHTMLX React Scheduler a valuable addition to a developer toolkit.<\/p>\n<h5>Scheduler That Feels Native to React<\/h5>\n<p>The React Scheduler is designed with React developers in mind, meaning it works the React way. You can build powerful multi-view scheduling calendars using well-known React concepts like props and state. To be specific, props allow you to configure Scheduler elements and dynamically pass data into the component, while state handles real-time updates and user interaction tracking. This approach ensures a smooth and responsive scheduling experience in React apps.<\/p>\n<p>The React Scheduler is installed via npm. Here is an example of importing and rendering the Scheduler:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> useEffect<span class=\"sy0\">,<\/span> useRef<span class=\"sy0\">,<\/span> useState <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">'react'<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> ReactScheduler<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> SchedulerConfig <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;@dhx\/react-scheduler&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> <span class=\"st0\">&quot;@dhx\/react-scheduler\/dist\/react-scheduler.css&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> <span class=\"st0\">&quot;.\/styles.css&quot;<\/span><br \/>\n<span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> demoData <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;.\/DemoData&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">export<\/span> <span class=\"kw1\">default<\/span> <span class=\"kw1\">function<\/span> BasicScheduler<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">const<\/span> <span class=\"br0\">&#91;<\/span>events<span class=\"sy0\">,<\/span> setEvents<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> useState<span class=\"br0\">&#40;<\/span>demoData.<span class=\"me1\">events<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">const<\/span> config<span class=\"sy0\">:<\/span> SchedulerConfig <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; first_hour<span class=\"sy0\">:<\/span> <span class=\"nu0\">8<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; last_hour<span class=\"sy0\">:<\/span> <span class=\"nu0\">20<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; time_step<span class=\"sy0\">:<\/span> <span class=\"nu0\">15<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">return<\/span> <span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div style<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"br0\">&#123;<\/span> height<span class=\"sy0\">:<\/span> <span class=\"st0\">'100vh'<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>ReactScheduler<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; events<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>events<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; config<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>config<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; date<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"kw1\">new<\/span> <span class=\"kw4\">Date<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;2025-08-15T00:00:00Z&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; view<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"st0\">&quot;month&quot;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">\/&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>The new Scheduler supports React Components, so you can personalize various parts of the scheduling solution by creating custom, reusable UI elements. Additionally, it adheres to React&#8217;s declarative approach, making data handling predictable and your code easier to maintain.<\/p>\n<h5>Extensive Functional Capabilities<\/h5>\n<p>New UI components are often introduced with basic capabilities, leaving room for further development based on user feedback. But DHTMLX React Scheduler was designed to be a step ahead from the start. This novelty is already geared up for complex scheduling scenarios, featuring advanced views such as Timeline, Resource (Units), and the ability to block and highlight time slots. How is it possible? You simply adopt the extensive feature set of our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler\/\" rel=\"noopener\" target=\"_blank\">JavaScript Scheduler<\/a> via its API.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image3-1.png\" alt=\"Resource (Units) view\" width=\"1555\" height=\"711\" class=\"aligncenter size-full wp-image-14163\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image3-1.png 1555w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image3-1-300x137.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image3-1-768x351.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image3-1-1024x468.png 1024w\" sizes=\"auto, (max-width: 1555px) 100vw, 1555px\" \/><\/p>\n<h5>Simplified Customization and Multiple Styling Options<\/h5>\n<p>The new React Scheduler stands out with its strong customization and styling flexibility, giving ample opportunities to tailor every part of the scheduling UI to any project requirements. Using custom React components, you can easily modify the default look and feel settings of events, tooltips, editing form (Lightbox), and other Scheduler elements.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image2.png\" alt=\"Dark theme\" width=\"1551\" height=\"776\" class=\"aligncenter size-full wp-image-14168\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image2.png 1551w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image2-300x150.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image2-768x384.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/image2-1024x512.png 1024w\" sizes=\"auto, (max-width: 1551px) 100vw, 1551px\" \/><\/p>\n<p>For instance, you can use custom React components in Scheduler templates:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> templates<span class=\"sy0\">:<\/span> SchedulerTemplates <span class=\"sy0\">=<\/span> useMemo<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; event_class<span class=\"sy0\">:<\/span> <span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"sy0\">,<\/span> event<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;templates-&quot;<\/span> <span class=\"sy0\">+<\/span> event.<span class=\"me1\">classname<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span> <span class=\"st0\">''<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; event_text<span class=\"sy0\">:<\/span> <span class=\"br0\">&#40;<\/span>start<span class=\"sy0\">,<\/span> end<span class=\"sy0\">,<\/span> event<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"sy0\">&lt;<\/span>EventTextBox event<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>event<span class=\"br0\">&#125;<\/span> <span class=\"sy0\">\/&gt;;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>React components are also effective for fine-tuning editing capabilities in your scheduling calendar. The default editing form (Lightbox) can be replaced with a custom React-based modal or other component, as explained in the <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/react.html#replacingthelightbox\" rel=\"noopener\" target=\"_blank\">documentation<\/a>.<\/p>\n<p>In the example below, you can see a custom editor integrated in the React Scheduler:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/ezgif.com-speed.gif\" alt=\"React Scheduler with a custom view\" width=\"1552\" height=\"840\" class=\"aligncenter size-full wp-image-14206\" \/><\/p>\n<p>Most of the styling needs in React Scheduler can be covered with a set of built-in themes that can be activated via the <strong>skin<\/strong> prop and changed dynamically, as shown in the code sample below:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">export<\/span> <span class=\"kw1\">default<\/span> <span class=\"kw1\">function<\/span> BasicScheduler<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"kw1\">const<\/span> <span class=\"br0\">&#91;<\/span>events<span class=\"sy0\">,<\/span> setEvents<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> useState<span class=\"br0\">&#40;<\/span>demoData.<span class=\"me1\">events<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">const<\/span> <span class=\"br0\">&#91;<\/span>theme<span class=\"sy0\">,<\/span> setTheme<span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> useState<span class=\"sy0\">&lt;<\/span>string<span class=\"sy0\">&gt;<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;terrace&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">const<\/span> switchTheme <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; setTheme<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>prevTheme<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#40;<\/span>prevTheme <span class=\"sy0\">===<\/span> <span class=\"st0\">&quot;terrace&quot;<\/span> <span class=\"sy0\">?<\/span> <span class=\"st0\">&quot;dark&quot;<\/span> <span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;terrace&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">return<\/span> <span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div style<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"br0\">&#123;<\/span> height<span class=\"sy0\">:<\/span> <span class=\"st0\">'100vh'<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>Button variant<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;contained&quot;<\/span> onClick<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> switchTheme<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">&gt;<\/span>Switch Theme<span class=\"sy0\">&lt;\/<\/span>Button<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>ReactScheduler<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; theme<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>theme<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; events<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>events<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; date<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"kw1\">new<\/span> <span class=\"kw4\">Date<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;2025-08-15T00:00:00Z&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; view<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"st0\">&quot;month&quot;<\/span><span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">\/&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Any targeted styling changes in existing Scheduler themes can be easily introduced using CSS variables:<\/p>\n<div class=\"codecolorer-container css default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"css codecolorer\"><span class=\"sy0\">:<\/span><span class=\"kw5\">root<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; <span class=\"re4\">--dhx-scheduler-base-colors-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"re0\">#01579B<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re4\">--dhx-scheduler-event-background<\/span><span class=\"sy0\">:<\/span> <span class=\"re0\">#33B579<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re4\">--dhx-scheduler-event-color<\/span><span class=\"sy0\">:<\/span> <span class=\"re0\">#FFFFFF<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re4\">--dhx-scheduler-base-colors-border<\/span><span class=\"sy0\">:<\/span> <span class=\"re0\">#B0B8CD<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"re4\">--dhx-scheduler-border-radius<\/span><span class=\"sy0\">:<\/span><span class=\"re3\">2px<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Many developers use the Material UI library to solve various styling issues in their React projects. If you are one of them, you don\u2019t need to change the habit since our new React Scheduler supports Material UI. <\/p>\n<p>With such a powerful styling toolkit, any design objective in your scheduling calendar becomes achievable.<\/p>\n<h5>Designed to Work Smoothly with TypeScript, Redux, and SSR Frameworks<\/h5>\n<p>The new DHTMLX React Scheduler is designed to seamlessly integrate into the modern development environments used with React. It offers out-of-the-box compatibility with TypeScript, including full support for JSX and TSX, enabling static typing and better maintainability. You can also count on Redux for centralized state management of complex Scheduler data, providing better control over data flow and ensuring predictable updates within your React solutions.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> dataBridge <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; save<span class=\"sy0\">:<\/span> <span class=\"br0\">&#40;<\/span>entity<span class=\"sy0\">:<\/span> string<span class=\"sy0\">,<\/span> action<span class=\"sy0\">:<\/span> string<span class=\"sy0\">,<\/span> payload<span class=\"sy0\">:<\/span> any<span class=\"sy0\">,<\/span> id<span class=\"sy0\">:<\/span> any<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>entity <span class=\"sy0\">!==<\/span> <span class=\"st0\">&quot;event&quot;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">return<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">switch<\/span> <span class=\"br0\">&#40;<\/span>action<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"st0\">&quot;update&quot;<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dispatch<span class=\"br0\">&#40;<\/span>updateEvent<span class=\"br0\">&#40;<\/span>payload<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"st0\">&quot;create&quot;<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dispatch<span class=\"br0\">&#40;<\/span>createEvent<span class=\"br0\">&#40;<\/span>payload<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"st0\">&quot;delete&quot;<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dispatch<span class=\"br0\">&#40;<\/span>deleteEvent<span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">default<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; console.<span class=\"me1\">warn<\/span><span class=\"br0\">&#40;<\/span>`Unknown action<span class=\"sy0\">:<\/span> $<span class=\"br0\">&#123;<\/span>action<span class=\"br0\">&#125;<\/span>`<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">return<\/span> <span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>div style<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span><span class=\"br0\">&#123;<\/span> height<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;100%&quot;<\/span><span class=\"sy0\">,<\/span> display<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;flex&quot;<\/span><span class=\"sy0\">,<\/span> flexDirection<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;column&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span>Toolbar<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">&lt;<\/span>ReactScheduler<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; \u2026<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; data<span class=\"sy0\">=<\/span><span class=\"br0\">&#123;<\/span>dataBridge<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">\/&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"sy0\">&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>This in its turn paves the way to powerful features such as multi user synchronization or undo\/redo functionality.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2025\/07\/undoredo-functionality.gif\" alt=\"React Scheduler + Redux - undo\/redo\" width=\"1556\" height=\"828\" class=\"aligncenter size-full wp-image-14189\" \/><br \/>\nIn addition, our React Scheduler plays well with popular SSR frameworks like Next.js and Remix without additional configuration. These frameworks will help significantly enhance performance, which is critical for business apps with comprehensive scheduling UIs, while also improving routing flexibility and supporting better scalability. <\/p>\n<p>These integrations will empower React teams to move fast and build advanced scheduling apps with confidence.<\/p>\n<h5>One Price for JavaScript + React Scheduler Pack<\/h5>\n<p>There is one final point that we must address in the release article, namely, the way the new React Scheduler will be distributed on the market. If you purchase the React Scheduler under a Commercial, Enterprise, or Ultimate license, you&#8217;ll receive a package that includes <strong>both the JavaScript and React versions for the price of one<\/strong>.<\/p>\n<p>Already using our JavaScript Scheduler and have an active license? Great! Just send your license number to contact@dhtmlx.com, and we&#8217;ll give you access to the React version as well.<\/p>\n<p>These are the essential points about DHTMLX React Scheduler. Check out the <a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/react.html\" rel=\"noopener\" target=\"_blank\">documentation<\/a> for more details.<\/p>\n<p>If you want to explore the capabilities of DHTMLX React Scheduler before adding it to your project, a <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler-for-React\/download.shtml\" rel=\"noopener\" target=\"_blank\">free 30-day trial version<\/a> is available for downloading.<\/p>\n<p>You are welcome to share your thoughts about DHTMLX React Scheduler in the comments section below.<\/p>\n<h5>Related Materials<\/h5>\n<ul>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler-for-React\/\" rel=\"noopener\" target=\"_blank\">DHTMLX React Scheduler<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/scheduler\/react.html\" rel=\"noopener\" target=\"_blank\">React Scheduler documentation<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxScheduler-for-React\/download.shtml\" rel=\"noopener\" target=\"_blank\">React Scheduler trial version<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/DHTMLX\/react-scheduler-quick-start\" rel=\"noopener\" target=\"_blank\">React Scheduler Quick Start<\/a><\/li>\n<li><a href=\"https:\/\/forum.dhtmlx.com\/t\/official-react-scheduler-wrapper-is-live\/79314\" rel=\"noopener\" target=\"_blank\">React Scheduler discussion on DHTMLX forum<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>React developers, we heard you! Following the enthusiastic reception of our React Gantt chart, we are thrilled to announce the release of DHTMLX React Scheduler! This novelty brings the &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":14161,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[33,56,15],"class_list":["post-14153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-releases","tag-all-posts","tag-react","tag-dhtmlxscheduler"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/14153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101014"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=14153"}],"version-history":[{"count":14,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/14153\/revisions"}],"predecessor-version":[{"id":14442,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/14153\/revisions\/14442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/14161"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=14153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=14153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=14153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}