React 19: Compiler, Server Components, Actions – Tính năng mới

React 19 chính thức phát hành ổn định vào tháng 12/2024, mang đến những thay đổi kiến trúc lớn nhất kể từ/hooks. Phiên bản này tập trung vào Server Components, Actions, hook use(), và hỗ trợ metadata native — đặt nền móng cho ứng dụng full-stack hiện đại.

React Compiler (trước đây là Forget): Tự động memoize

React Compiler không gói kèm trong bản phát hành ổn định của React 19. Đây là một trình biên dịch riêng, chọn tham gia (opt-in), tự động thêm memoization cho component, hook và giá trị — loại bỏ nhu cầu viết thủ công useMemo, useCallback, hay React.memo. Compiler phân tích dependency tại thời điểm build và sinh mã tối ưu, giảm re-render không cần thiết mà không thay đổi logic ứng dụng.

React Compiler workflow source code input optimized component output

Để kích hoạt, cài đặt @react/compiler và cấu hình trong bundler (Vite, Webpack, Next.js). React 19 cung cấp các API runtime cần thiết để Compiler hoạt động, nhưng Compiler bản thân phát hành riêng.

Server Components: Ổn định trong React 19

React Server Components (RSC) giờ đây ổn định. Khác với Client Component chạy trong trình duyệt, Server Component render trước (ahead-of-time) trong môi trường server tách biệt, không gửi JavaScript xuống client. Kết quả là HTML tĩnh hoặc stream, giảm bundle size đáng kể.

Server Component vs Client Component architecture diagram

Điểm quan trọng: Server Component không dùng directive "use server" — directive đó dành cho Server Actions. Thư viện có thể target điều kiện export react-server như peer dependency để tối ưu cho môi trường server.

Server Actions: Chạy mã server từ client

Server Actions cho phép Client Component gọi hàm async chạy trên server. Đánh dấu bằng directive "use server" ở đầu hàm. React tự động sinh endpoint, serialize tham số, gọi server và trả kết quả — như RPC nhưng tích hợp sẵn vào cycle render.

Server Action có thể tạo trong Server Component và truyền như prop cho Client Component. Điều này cho phép pattern: Server Component lấy dữ liệu, tạo action, truyền cho Client Component xử lý form/interaction.

Hook use(): Đọc Context và Promise linh hoạt

Hook use() mới trong React 19 có 2 chế độ:

  • use(context) — đọc Context, có thể gọi bên trong điều kiện (if) và vòng lặp — khác với useContext chỉ dùng ở top-level.
  • use(promise) — đọc Promise từ Context, cho phép chia sẻ dữ liệu async không cần prop drilling. Component sẽ suspend cho đến khi Promise resolve.

Luôn bọc component dùng use(promise) trong để chỉ subtree đó bị treo chờ dữ liệu.

Xử lý form với Actions

React 19 hỗ trợ native trong Server Component — bật progressive enhancement: form hoạt động ngay cả khi JS chưa load xong. Khi submit, React gửi request đến server function, chờ kết quả, rồi cập nhật UI.

Hai hook hỗ trợ:

  • useFormStatus() — đọc trạng thái pending khi form đang submit.
  • useOptimistic() — cập nhật UI lạc quan trước khi background operation hoàn tất.

Metadata tags: , , trong component</h2> <p>React 19 hỗ trợ native các thẻ metadata ngay trong component: <code><title></code>, <code></code>, <code></code>. React tự động hoist chúng vào <code></code>. Tính năng này hoạt động cho client-only app, streaming SSR, và Server Components. Thư viện như <code>react-helmet</code> vẫn có giá trị cho overriding theo route.</p> <h2>Các thay đổi breaking khác</h2> <ul> <li><code>ref</code> giờ là prop thường trên function component — không cần <code>forwardRef</code>.</li> <li><code></code> thay bằng <code></code> làm provider.</li> <li>Loại bỏ API lỗi thời: <code>ReactDOM.render</code>, <code>ReactDOM.hydrate</code>, <code>react-test-renderer</code>, <code>react-dom/test-utils</code>.</li> <li>Cải thiện thông báo lỗi hydration và diff error.</li> </ul> <h2>Tóm tắt nhanh</h2> <table> <thead> <tr> <th>Tính năng</th> <th>Trạng thái</th> <th>Ghi chú</th> </tr> </thead> <tbody> <tr> <td>React Compiler</td> <td>Opt-in, riêng</td> <td>Auto-memoize, không gói kèm React 19</td> </tr> <tr> <td>Server Components</td> <td>Stable</td> <td>Render ahead-of-time, no JS sent to client</td> </tr> <tr> <td>Server Actions</td> <td>Stable</td> <td><code>"use server"</code> directive, RPC-like</td> </tr> <tr> <td>use() hook</td> <td>Stable</td> <td>Context conditional, Promise suspend</td> </tr> <tr> <td> Actions</td> <td>Stable</td> <td>Progressive enhancement, useFormStatus, useOptimistic</td> </tr> <tr> <td>Metadata tags</td> <td>Stable</td> <td>Auto hoist to </td> </tr> <tr> <td>ref as prop</td> <td>Breaking</td> <td>No forwardRef needed</td> </tr> </tbody> </table> <h2>Tham khảo thêm</h2> <p>Nguồn: <a href="https://react.dev/blog/2024/12/05/react-19" target="_blank" rel="noopener">React 19 Announcement</a>, <a href="https://react.dev/blog/2024/04/25/react-19-upgrade-guide" target="_blank" rel="noopener">Upgrade Guide</a>, <a href="https://react.dev/reference/react/use" target="_blank" rel="noopener">use() Hook Reference</a>, <a href="https://react.dev/reference/react-dom/components/form" target="_blank" rel="noopener">Form Actions Docs</a>.</p> </div><!-- .entry-content --> <div class="entry-tags"> <span class="tag-links"> <a href="https://chuhung.net/tag/framework/" rel="tag">Framework</a> <a href="https://chuhung.net/tag/lap-trinh/" rel="tag">Lập trình</a> <a href="https://chuhung.net/tag/ma-nguon-mo/" rel="tag">Mã nguồn mở</a> <a href="https://chuhung.net/tag/react/" rel="tag">React</a> <a href="https://chuhung.net/tag/typescript/" rel="tag">TypeScript</a> <a href="https://chuhung.net/tag/web-development/" rel="tag">Web Development</a> <a href="https://chuhung.net/tag/web-framework/" rel="tag">Web Framework</a></span> </div><!-- .entry-tags --> </article><!-- #post-## --> <div class="author-box clear"> <a href="https://chuhung.net/author/hungs20/"><img alt='' src='https://secure.gravatar.com/avatar/e4dc6bd9b6284a8f037d5d792bab01e6bb568c7113ecc1881e4dc49a25d5623e?s=120&d=wavatar&r=g' srcset='https://secure.gravatar.com/avatar/e4dc6bd9b6284a8f037d5d792bab01e6bb568c7113ecc1881e4dc49a25d5623e?s=240&d=wavatar&r=g 2x' class='avatar avatar-120 photo' height='120' width='120' decoding='async'/></a> <div class="author-meta"> <div class="author-name"> <a href="https://chuhung.net/author/hungs20/">Chu Hưng</a> </div> <div class="author-desc"> Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua. </div> </div> </div><!-- .author-box --> <div class="entry-related clear"> <h3>Bài viết liên quan</h3> <div class="content-loop clear"> <div id="post-5079" class="clear last post-5079 post type-post status-publish format-standard has-post-thumbnail hentry category-lap-trinh tag-ma-nguon-mo"> <a class="thumbnail-link" href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/"> <div class="thumbnail-wrap"> <img width="300" height="300" src="https://chuhung.net/wp-content/uploads/2026/08/img_3_2-7-300x300.png" class="attachment-blogsite_post_thumb size-blogsite_post_thumb wp-post-image" alt="" decoding="async" srcset="https://chuhung.net/wp-content/uploads/2026/08/img_3_2-7-300x300.png 300w, https://chuhung.net/wp-content/uploads/2026/08/img_3_2-7-280x280.png 280w" sizes="(max-width: 300px) 100vw, 300px" /> </div><!-- .thumbnail-wrap --> </a> <div class="entry-category"><a href="https://chuhung.net/category/lap-trinh/">Lập trình</a> </div> <h2 class="entry-title"><a href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/">Zig Language: Tính Năng, So Sánh Với Rust/C++ Cho System Programming</a></h2> <div class="entry-meta"> <span class="entry-author"><a href="https://chuhung.net/author/hungs20/" rel="author">Chu Hưng</a></span> <span class="sep author-sep">·</span> <span class="entry-date">15/08/2026</span> <span class="sep">·</span> <span class='entry-comment'><a href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/#respond" class="comments-link" >0 Bình luận</a></span> <span class="sep">·</span> <span class="count-views"><span class="svl_post_view_count" data-id="5079" data-nonce="c616d73faa">0 Lượt xem</span> </span> </div><!-- .entry-meta --> <div class="entry-summary"> <p>Zig là ngôn ngữ lập trình hệ thống hiện đại, tối ưu hiệu năng, độ an toàn và khả năng đọc. Zig phát triển từ 2015 bởi Andrew Kelley, với… </p> <span class="read-more"><a href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/">Xem thêm</a></span> </div><!-- .entry-summary --> </div><!-- #post-5079 --> <div id="post-5053" class="clear last post-5053 post type-post status-publish format-standard has-post-thumbnail hentry category-lap-trinh tag-llm tag-ma-nguon-mo"> <a class="thumbnail-link" href="https://chuhung.net/tauri-framework-xay-dung-app-desktop-da-nen-tang-voi-rust/"> <div class="thumbnail-wrap"> <img width="300" height="300" src="https://chuhung.net/wp-content/uploads/2026/08/tauri_vs_electron-300x300.jpg" class="attachment-blogsite_post_thumb size-blogsite_post_thumb wp-post-image" alt="Tauri vs Electron bundle size comparison showing Tauri 3-5MB vs Electron 50-60MB" decoding="async" srcset="https://chuhung.net/wp-content/uploads/2026/08/tauri_vs_electron-300x300.jpg 300w, https://chuhung.net/wp-content/uploads/2026/08/tauri_vs_electron-280x280.jpg 280w" sizes="(max-width: 300px) 100vw, 300px" /> </div><!-- .thumbnail-wrap --> </a> <div class="entry-category"><a href="https://chuhung.net/category/lap-trinh/">Lập trình</a> </div> <h2 class="entry-title"><a href="https://chuhung.net/tauri-framework-xay-dung-app-desktop-da-nen-tang-voi-rust/">Tauri: Framework Xây Dựng App Desktop Đa Nền Tảng Với Rust</a></h2> <div class="entry-meta"> <span class="entry-author"><a href="https://chuhung.net/author/hungs20/" rel="author">Chu Hưng</a></span> <span class="sep author-sep">·</span> <span class="entry-date">15/08/2026</span> <span class="sep">·</span> <span class='entry-comment'><a href="https://chuhung.net/tauri-framework-xay-dung-app-desktop-da-nen-tang-voi-rust/#respond" class="comments-link" >0 Bình luận</a></span> <span class="sep">·</span> <span class="count-views"><span class="svl_post_view_count" data-id="5053" data-nonce="c616d73faa">2 Lượt xem</span> </span> </div><!-- .entry-meta --> <div class="entry-summary"> <p>Tauri là framework mã nguồn mở cho phép xây dựng ứng dụng desktop (Windows, macOS, Linux) bằng công nghệ web (HTML, CSS, JavaScript/TypeScript) nhưng sử dụng Rust làm backend thay… </p> <span class="read-more"><a href="https://chuhung.net/tauri-framework-xay-dung-app-desktop-da-nen-tang-voi-rust/">Xem thêm</a></span> </div><!-- .entry-summary --> </div><!-- #post-5053 --> <div id="post-5038" class="clear last post-5038 post type-post status-publish format-standard has-post-thumbnail hentry category-lap-trinh tag-ai-agent tag-ai-coding tag-hermes tag-llm tag-mcp tag-model-context-protocol"> <a class="thumbnail-link" href="https://chuhung.net/sqlite-trong-ung-dung-ai-huong-dan-tich-hop-embedding-va-vector-search/"> <div class="thumbnail-wrap"> <img width="300" height="300" src="https://chuhung.net/wp-content/uploads/2026/08/img_2_1-4-300x300.png" class="attachment-blogsite_post_thumb size-blogsite_post_thumb wp-post-image" alt="" decoding="async" srcset="https://chuhung.net/wp-content/uploads/2026/08/img_2_1-4-300x300.png 300w, https://chuhung.net/wp-content/uploads/2026/08/img_2_1-4-280x280.png 280w" sizes="(max-width: 300px) 100vw, 300px" /> </div><!-- .thumbnail-wrap --> </a> <div class="entry-category"><a href="https://chuhung.net/category/lap-trinh/">Lập trình</a> </div> <h2 class="entry-title"><a href="https://chuhung.net/sqlite-trong-ung-dung-ai-huong-dan-tich-hop-embedding-va-vector-search/">SQLite trong ứng dụng AI: Hướng dẫn tích hợp embedding và vector search</a></h2> <div class="entry-meta"> <span class="entry-author"><a href="https://chuhung.net/author/hungs20/" rel="author">Chu Hưng</a></span> <span class="sep author-sep">·</span> <span class="entry-date">15/08/2026</span> <span class="sep">·</span> <span class='entry-comment'><a href="https://chuhung.net/sqlite-trong-ung-dung-ai-huong-dan-tich-hop-embedding-va-vector-search/#respond" class="comments-link" >0 Bình luận</a></span> <span class="sep">·</span> <span class="count-views"><span class="svl_post_view_count" data-id="5038" data-nonce="c616d73faa">2 Lượt xem</span> </span> </div><!-- .entry-meta --> <div class="entry-summary"> <p>SQLite là cơ sở dữ liệu nhúng phổ biến nhất thế giới, nhưng ít người biết nó còn có thể làm vector database cho ứng dụng AI nhờ extension sqlite-vss… </p> <span class="read-more"><a href="https://chuhung.net/sqlite-trong-ung-dung-ai-huong-dan-tich-hop-embedding-va-vector-search/">Xem thêm</a></span> </div><!-- .entry-summary --> </div><!-- #post-5038 --> </div><!-- .related-posts --> </div><!-- .entry-related --> <div class="wpdiscuz_top_clearing"></div> <div id='comments' class='comments-area'><div id='respond' style='width: 0;height: 0;clear: both;margin: 0;padding: 0;'></div><div id='wpd-post-rating' class='wpd-not-rated'> <div class='wpd-rating-wrap'> <div class='wpd-rating-left'></div> <div class='wpd-rating-data'> <div class='wpd-rating-value'> <span class='wpdrv'>0</span> <span class='wpdrc'>0</span> <span class='wpdrt'>đánh giá</span></div> <div class='wpd-rating-title'>Article Rating</div> <div class='wpd-rating-stars'><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg></div><div class='wpd-rate-starts'><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg><svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg></div></div> <div class='wpd-rating-right'></div></div></div> <div id="wpdcom" class="wpdiscuz_unauth wpd-default wpd-layout-1 wpd-comments-open"> <div class="wc_social_plugin_wrapper"> </div> <div class="wpd-form-wrap"> <div class="wpd-form-head"> <div class="wpd-sbs-toggle"> <i class="far fa-envelope"></i> <span class="wpd-sbs-title">Theo dõi</span> <i class="fas fa-caret-down"></i> </div> <div class="wpd-auth"> <div class="wpd-login"> <a rel="nofollow" href="https://chuhung.net/wp-login.php?redirect_to=https%3A%2F%2Fchuhung.net%2Freact-19-compiler-server-components-actions-tinh-nang-moi%2F"><i class='fas fa-sign-in-alt'></i> Đăng nhập</a> </div> </div> </div> <div class="wpdiscuz-subscribe-bar wpdiscuz-hidden"> <form action="https://chuhung.net/wp-admin/admin-ajax.php?action=wpdAddSubscription" method="post" id="wpdiscuz-subscribe-form"> <div class="wpdiscuz-subscribe-form-intro">Thông báo của </div> <div class="wpdiscuz-subscribe-form-option" style="width:40%;"> <select class="wpdiscuz_select" name="wpdiscuzSubscriptionType"> <option value="post">bình luận theo dõi mới</option> <option value="all_comment" >trả lời mới cho bình luận của tôi</option> </select> </div> <div class="wpdiscuz-item wpdiscuz-subscribe-form-email"> <input class="email" type="email" name="wpdiscuzSubscriptionEmail" required="required" value="" placeholder="Email"/> </div> <div class="wpdiscuz-subscribe-form-button"> <input id="wpdiscuz_subscription_button" class="wpd-prim-button wpd_not_clicked" type="submit" value="›" name="wpdiscuz_subscription_button"/> </div> <input type="hidden" id="wpdiscuz_subscribe_form_nonce" name="wpdiscuz_subscribe_form_nonce" value="2963ff5557" /><input type="hidden" name="_wp_http_referer" value="/react-19-compiler-server-components-actions-tinh-nang-moi/" /> <div class="wpd-field-captcha wpdiscuz-item"> <div class="wpdiscuz-recaptcha" id='wpdiscuz-recaptcha-subscribe-form'></div> <input id='wpdiscuz-recaptcha-field-subscribe-form' type='hidden' name='wpdiscuz_recaptcha_subscribe_form' value="" required="required" aria-required='true' class="wpdiscuz_reset"/> <div class="clearfix"></div> </div> </form> </div> <div class="wpd-form wpd-form-wrapper wpd-main-form-wrapper" id='wpd-main-form-wrapper-0_0'> <form method="post" enctype="multipart/form-data" data-uploading="false" class="wpd_comm_form wpd_main_comm_form" > <div class="wpd-field-comment"> <div class="wpdiscuz-item wc-field-textarea"> <div class="wpdiscuz-textarea-wrap "> <div class="wpd-avatar"> <img alt='guest' src='https://secure.gravatar.com/avatar/49abb654b1680646755947b100b59911646c736930c8bed9f90d4f0b075376c6?s=56&d=wavatar&r=g' srcset='https://secure.gravatar.com/avatar/49abb654b1680646755947b100b59911646c736930c8bed9f90d4f0b075376c6?s=112&d=wavatar&r=g 2x' class='avatar avatar-56 photo' height='56' width='56' decoding='async'/> </div> <div id="wpd-editor-wraper-0_0" style="display: none;"> <div id="wpd-editor-char-counter-0_0" class="wpd-editor-char-counter"></div> <label style="display: none;" for="wc-textarea-0_0">Label</label> <textarea id="wc-textarea-0_0" name="wc_comment" class="wc_comment wpd-field"></textarea> <div id="wpd-editor-0_0"></div> <div id="wpd-editor-toolbar-0_0"> <button title="In đậm" class="ql-bold" ></button> <button title="In nghiêng" class="ql-italic" ></button> <button title="Gạch dưới" class="ql-underline" ></button> <button title="Đình công" class="ql-strike" ></button> <button title="Danh sách đã xếp thứ tự" class="ql-list" value='ordered' ></button> <button title="Danh sách chưa sắp xếp" class="ql-list" value='bullet' ></button> <button title="Trích dẫn" class="ql-blockquote" ></button> <button title="Code Block" class="ql-code-block" ></button> <button title="Link" class="ql-link" ></button> <button title="Mã nguồn" class="ql-sourcecode" data-wpde_button_name='sourcecode'>{}</button> <button title="Spoiler" class="ql-spoiler" data-wpde_button_name='spoiler'>[+]</button> <div class="wpd-editor-buttons-right"> <span class='wmu-upload-wrap' wpd-tooltip='Đính kèm hình ảnh vào bình luận này' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'></i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files' accept='image/*'/></label></span> </div> </div> </div> </div> </div> </div> <div class="wpd-form-foot" style='display:none;'> <div class="wpdiscuz-textarea-foot"> <div class="wpdiscuz-button-actions"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'></div><div class='wmu-tabs wmu-videos-tab wmu-hide'></div><div class='wmu-tabs wmu-files-tab wmu-hide'></div></div></div> </div> <div class="wpd-form-row"> <div class="wpd-form-col-left"> <div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-user"></i> </div> <input id="wc_name-0_0" value="" required='required' aria-required='true' class="wc_name wpd-field" type="text" name="wc_name" placeholder="Họ tên*" maxlength="50" pattern='.{3,50}' title=""> <label for="wc_name-0_0" class="wpdlb">Họ tên*</label> </div> <div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-at"></i> </div> <input id="wc_email-0_0" value="" class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email"/> <label for="wc_email-0_0" class="wpdlb">Email</label> </div> </div> <div class="wpd-form-col-right"> <div class="wpd-field-captcha wpdiscuz-item"> <div class="wpdiscuz-recaptcha" id='wpdiscuz-recaptcha-0_0'></div> <input id='wpdiscuz-recaptcha-field-0_0' type='hidden' name='wc_captcha' value="" required="required" aria-required='true' class="wpdiscuz_reset"/> <div class="clearfix"></div> </div> <div class="wc-field-submit"> <label class="wpd_label" wpd-tooltip="Thông báo nếu có phản hồi mới cho bình luận này"> <input id="wc_notification_new_comment-0_0" class="wc_notification_new_comment-0_0 wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type" /> <span class="wpd_label__text"> <span class="wpd_label__check"> <i class="fas fa-bell wpdicon wpdicon-on"></i> <i class="fas fa-bell-slash wpdicon wpdicon-off"></i> </span> </span> </label> <input id="wpd-field-submit-0_0" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment" aria-label="Post Comment"/> </div> </div> <div class="clearfix"></div> </div> </div> <input type="hidden" class="wpdiscuz_unique_id" value="0_0" name="wpdiscuz_unique_id"> </form> </div> <div id="wpdiscuz_hidden_secondary_form" style="display: none;"> <div class="wpd-form wpd-form-wrapper wpd-secondary-form-wrapper" id='wpd-secondary-form-wrapper-wpdiscuzuniqueid' style='display: none;'> <div class="wpd-secondary-forms-social-content"></div> <div class="clearfix"></div> <form method="post" enctype="multipart/form-data" data-uploading="false" class="wpd_comm_form wpd-secondary-form-wrapper" > <div class="wpd-field-comment"> <div class="wpdiscuz-item wc-field-textarea"> <div class="wpdiscuz-textarea-wrap "> <div class="wpd-avatar"> <img alt='guest' src='https://secure.gravatar.com/avatar/e8c58cf52ea0e163228ffc647f0993103502dc89faf13e0cde68f899f829c29a?s=56&d=wavatar&r=g' srcset='https://secure.gravatar.com/avatar/e8c58cf52ea0e163228ffc647f0993103502dc89faf13e0cde68f899f829c29a?s=112&d=wavatar&r=g 2x' class='avatar avatar-56 photo' height='56' width='56' decoding='async'/> </div> <div id="wpd-editor-wraper-wpdiscuzuniqueid" style="display: none;"> <div id="wpd-editor-char-counter-wpdiscuzuniqueid" class="wpd-editor-char-counter"></div> <label style="display: none;" for="wc-textarea-wpdiscuzuniqueid">Label</label> <textarea id="wc-textarea-wpdiscuzuniqueid" name="wc_comment" class="wc_comment wpd-field"></textarea> <div id="wpd-editor-wpdiscuzuniqueid"></div> <div id="wpd-editor-toolbar-wpdiscuzuniqueid"> <button title="In đậm" class="ql-bold" ></button> <button title="In nghiêng" class="ql-italic" ></button> <button title="Gạch dưới" class="ql-underline" ></button> <button title="Đình công" class="ql-strike" ></button> <button title="Danh sách đã xếp thứ tự" class="ql-list" value='ordered' ></button> <button title="Danh sách chưa sắp xếp" class="ql-list" value='bullet' ></button> <button title="Trích dẫn" class="ql-blockquote" ></button> <button title="Code Block" class="ql-code-block" ></button> <button title="Link" class="ql-link" ></button> <button title="Mã nguồn" class="ql-sourcecode" data-wpde_button_name='sourcecode'>{}</button> <button title="Spoiler" class="ql-spoiler" data-wpde_button_name='spoiler'>[+]</button> <div class="wpd-editor-buttons-right"> <span class='wmu-upload-wrap' wpd-tooltip='Đính kèm hình ảnh vào bình luận này' wpd-tooltip-position='left'><label class='wmu-add'><i class='far fa-image'></i><input style='display:none;' class='wmu-add-files' type='file' name='wmu_files' accept='image/*'/></label></span> </div> </div> </div> </div> </div> </div> <div class="wpd-form-foot" style='display:none;'> <div class="wpdiscuz-textarea-foot"> <div class="wpdiscuz-button-actions"><div class='wmu-action-wrap'><div class='wmu-tabs wmu-images-tab wmu-hide'></div><div class='wmu-tabs wmu-videos-tab wmu-hide'></div><div class='wmu-tabs wmu-files-tab wmu-hide'></div></div></div> </div> <div class="wpd-form-row"> <div class="wpd-form-col-left"> <div class="wpdiscuz-item wc_name-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-user"></i> </div> <input id="wc_name-wpdiscuzuniqueid" value="" required='required' aria-required='true' class="wc_name wpd-field" type="text" name="wc_name" placeholder="Họ tên*" maxlength="50" pattern='.{3,50}' title=""> <label for="wc_name-wpdiscuzuniqueid" class="wpdlb">Họ tên*</label> </div> <div class="wpdiscuz-item wc_email-wrapper wpd-has-icon"> <div class="wpd-field-icon"><i class="fas fa-at"></i> </div> <input id="wc_email-wpdiscuzuniqueid" value="" class="wc_email wpd-field" type="email" name="wc_email" placeholder="Email"/> <label for="wc_email-wpdiscuzuniqueid" class="wpdlb">Email</label> </div> </div> <div class="wpd-form-col-right"> <div class="wpd-field-captcha wpdiscuz-item"> <div class="wpdiscuz-recaptcha" id='wpdiscuz-recaptcha-wpdiscuzuniqueid'></div> <input id='wpdiscuz-recaptcha-field-wpdiscuzuniqueid' type='hidden' name='wc_captcha' value="" required="required" aria-required='true' class="wpdiscuz_reset"/> <div class="clearfix"></div> </div> <div class="wc-field-submit"> <label class="wpd_label" wpd-tooltip="Thông báo nếu có phản hồi mới cho bình luận này"> <input id="wc_notification_new_comment-wpdiscuzuniqueid" class="wc_notification_new_comment-wpdiscuzuniqueid wpd_label__checkbox" value="comment" type="checkbox" name="wpdiscuz_notification_type" /> <span class="wpd_label__text"> <span class="wpd_label__check"> <i class="fas fa-bell wpdicon wpdicon-on"></i> <i class="fas fa-bell-slash wpdicon wpdicon-off"></i> </span> </span> </label> <input id="wpd-field-submit-wpdiscuzuniqueid" class="wc_comm_submit wpd_not_clicked wpd-prim-button" type="submit" name="submit" value="Post Comment" aria-label="Post Comment"/> </div> </div> <div class="clearfix"></div> </div> </div> <input type="hidden" class="wpdiscuz_unique_id" value="wpdiscuzuniqueid" name="wpdiscuz_unique_id"> </form> </div> </div> </div> <div id="wpd-threads" class="wpd-thread-wrapper"> <div class="wpd-thread-head"> <div class="wpd-thread-info " data-comments-count="0"> <span class='wpdtc' title='0'>0</span> Comments </div> <div class="wpd-space"></div> <div class="wpd-thread-filter"> <div class="wpd-filter wpdf-reacted wpd_not_clicked wpdiscuz-hidden" data-filter-type="most_reacted" wpd-tooltip="Bình luận phản ứng nhiều nhất"> <i class="fas fa-bolt"></i></div> <div class="wpd-filter wpdf-hottest wpd_not_clicked wpdiscuz-hidden" data-filter-type="hottest_thread" wpd-tooltip="Chủ đề bình luận hot nhất"> <i class="fas fa-fire"></i></div> <div class="wpd-filter wpdf-sorting wpdiscuz-hidden"> <span class="wpdiscuz-sort-button wpdiscuz-date-sort-asc wpdiscuz-sort-button-active" data-sorting="oldest">Cũ nhất</span> <i class="fas fa-sort-down"></i> <div class="wpdiscuz-sort-buttons"> <span class="wpdiscuz-sort-button wpdiscuz-date-sort-desc" data-sorting="newest">Mới nhất</span> <span class="wpdiscuz-sort-button wpdiscuz-vote-sort-up" data-sorting="by_vote">Được bỏ phiếu nhiều nhất</span> </div> </div> </div> <div class="wpd-filter-container wpdiscuz-hidden"></div> </div> <div class="wpd-thread-list"> <!-- // From wpDiscuz's Caches // --> <div class="wpdiscuz-comment-pagination"> </div> </div> </div> </div> </div> <div id="wpdiscuz-loading-bar" class="wpdiscuz-loading-bar-unauth"></div> <div id="wpdiscuz-comment-message" class="wpdiscuz-comment-message-unauth"></div> </main><!-- #main --> </div><!-- #primary --> <aside id="secondary" class="widget-area sidebar"> <div id="blogsite-tabs-1" class="widget widget-blogsite-tabs widget_tabs posts-thumbnail-widget"> <div class='tabs tabs_default'> <ul class="horizontal"> <li class="active"><a href="#tab1" title="Phổ biến"><i class="fa fa-star"></i> Phổ biến</a></li> <li><a href="#tab2" title="Mới nhất"><i class="fa fa-clock-o"></i> Mới nhất</a></li> <li><a href="#tab3" title="Bình luận"><i class="fa fa-comments"></i> Bình luận</a></li> <li><a href="#tab4" title="Tags"><i class="fa fa-tag"></i> Tags</a></li> </ul> <div id='tab1' class="tab-content widget-posts-thumbnail"> <ul><li class="clear"><a href="https://chuhung.net/bloc-pattern-co-ban-trong-flutter/" rel="bookmark"><div class="thumbnail-wrap"><img width="300" height="150" src="https://chuhung.net/wp-content/uploads/2024/10/bloc-300x150.jpg" class="attachment-blogsite_widget_thumb size-blogsite_widget_thumb wp-post-image" alt="" decoding="async" /></div><div class="entry-wrap">Bloc Pattern cơ bản trong Flutter</div><div class="gradient"></div></a></li><li class="post-list post-list-1"><span>1</span><a href="https://chuhung.net/unit-test-cho-thu-vien-cocoapods-bang-podspec/" rel="bookmark">Unit Test cho thư viện CocoaPods bằng Podspec</a></li><li class="post-list post-list-2"><span>2</span><a href="https://chuhung.net/share-code-hieu-ung-tuyet-roi-ngau-nhien-trang-tri-noel-cho-blog-website/" rel="bookmark">Hiệu ứng tuyết rơi ngẫu nhiên trang trí Noel cho blog/website</a></li><li class="post-list post-list-3"><span>3</span><a href="https://chuhung.net/unit-test-trong-swift-voi-quick-va-nimble/" rel="bookmark">Unit Test trong Swift với Quick và Nimble</a></li><li class="post-list post-list-4"><span>4</span><a href="https://chuhung.net/stream-trong-flutter/" rel="bookmark">Stream trong Flutter</a></li></ul> </div> <div id='tab2' class="tab-content widget-posts-thumbnail"> <ul><li class="clear"><a href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/" rel="bookmark"><div class="thumbnail-wrap"><img width="300" height="150" src="https://chuhung.net/wp-content/uploads/2026/08/img_3_2-7-300x150.png" class="attachment-blogsite_widget_thumb size-blogsite_widget_thumb wp-post-image" alt="" decoding="async" /></div><div class="entry-wrap">Zig Language: Tính Năng, So Sánh Với Rust/C++ Cho System Programming</div><div class="gradient"></div></a></li><li class="post-list post-list-1"><span>1</span><a href="https://chuhung.net/btc-futures-smc-price-action-phan-tich-da-khung-thoi-gian-cho-entry-chinh-xac/" rel="bookmark">BTC Futures SMC Price Action: Phân Tích Đa Khung Thời Gian Cho Entry Chính Xác</a></li><li class="post-list post-list-2"><span>2</span><a href="https://chuhung.net/model-context-protocol-mcp-tieu-chuan-ket-noi-ai-agent-voi-cong-cu/" rel="bookmark">Model Context Protocol (MCP): Tiêu Chuẩn Kết Nối AI Agent Với Công Cụ</a></li><li class="post-list post-list-3"><span>3</span><a href="https://chuhung.net/windows-11-24h2-tinh-nang-ai-recall-sudo-wi-fi-7-va-cach-nang-cap/" rel="bookmark">Windows 11 24H2: Tính năng AI, Recall, Sudo, Wi-Fi 7 và cách nâng cấp</a></li><li class="post-list post-list-4"><span>4</span><a href="https://chuhung.net/react-19-compiler-server-components-actions-tinh-nang-moi/" rel="bookmark">React 19: Compiler, Server Components, Actions – Tính năng mới</a></li></ul> </div> <div id='tab3' class="tab-content"> </div> <div id='tab4' class="tab-content"> <div class="tags-wrap clear"> <a href="https://chuhung.net/tag/tri-tue-nhan-tao/" class="tag-cloud-link tag-link-161 tag-link-position-1" style="font-size: 22pt;" aria-label="Trí tuệ nhân tạo (107 mục)">Trí tuệ nhân tạo</a> <a href="https://chuhung.net/tag/crypto/" class="tag-cloud-link tag-link-174 tag-link-position-2" style="font-size: 21.239130434783pt;" aria-label="Crypto (94 mục)">Crypto</a> <a href="https://chuhung.net/tag/ma-nguon-mo/" class="tag-cloud-link tag-link-160 tag-link-position-3" style="font-size: 20.326086956522pt;" aria-label="Mã nguồn mở (82 mục)">Mã nguồn mở</a> <a href="https://chuhung.net/tag/lap-trinh/" class="tag-cloud-link tag-link-254 tag-link-position-4" style="font-size: 19.717391304348pt;" aria-label="Lập trình (75 mục)">Lập trình</a> <a href="https://chuhung.net/tag/meo-hay/" class="tag-cloud-link tag-link-180 tag-link-position-5" style="font-size: 19.413043478261pt;" aria-label="Mẹo hay (71 mục)">Mẹo hay</a> <a href="https://chuhung.net/tag/llm/" class="tag-cloud-link tag-link-170 tag-link-position-6" style="font-size: 19.413043478261pt;" aria-label="LLM (71 mục)">LLM</a> <a href="https://chuhung.net/tag/ai/" class="tag-cloud-link tag-link-247 tag-link-position-7" style="font-size: 18.5pt;" aria-label="AI (62 mục)">AI</a> <a href="https://chuhung.net/tag/blockchain/" class="tag-cloud-link tag-link-203 tag-link-position-8" style="font-size: 16.217391304348pt;" aria-label="Blockchain (44 mục)">Blockchain</a> <a href="https://chuhung.net/tag/bao-mat/" class="tag-cloud-link tag-link-177 tag-link-position-9" style="font-size: 16.217391304348pt;" aria-label="Bảo mật (44 mục)">Bảo mật</a> <a href="https://chuhung.net/tag/tien-ma-hoa/" class="tag-cloud-link tag-link-215 tag-link-position-10" style="font-size: 15.45652173913pt;" aria-label="Tiền mã hóa (39 mục)">Tiền mã hóa</a> <a href="https://chuhung.net/tag/web-development/" class="tag-cloud-link tag-link-256 tag-link-position-11" style="font-size: 15.304347826087pt;" aria-label="Web Development (38 mục)">Web Development</a> <a href="https://chuhung.net/tag/iphone/" class="tag-cloud-link tag-link-261 tag-link-position-12" style="font-size: 15.152173913043pt;" aria-label="iPhone (37 mục)">iPhone</a> <a href="https://chuhung.net/tag/ai-agent/" class="tag-cloud-link tag-link-157 tag-link-position-13" style="font-size: 14.847826086957pt;" aria-label="AI Agent (35 mục)">AI Agent</a> <a href="https://chuhung.net/tag/tin-tuc-cong-nghe/" class="tag-cloud-link tag-link-346 tag-link-position-14" style="font-size: 14.54347826087pt;" aria-label="Tin tức công nghệ (34 mục)">Tin tức công nghệ</a> <a href="https://chuhung.net/tag/android/" class="tag-cloud-link tag-link-314 tag-link-position-15" style="font-size: 14.239130434783pt;" aria-label="Android (32 mục)">Android</a> <a href="https://chuhung.net/tag/backend/" class="tag-cloud-link tag-link-255 tag-link-position-16" style="font-size: 14.086956521739pt;" aria-label="Backend (31 mục)">Backend</a> <a href="https://chuhung.net/tag/framework/" class="tag-cloud-link tag-link-325 tag-link-position-17" style="font-size: 13.782608695652pt;" aria-label="Framework (30 mục)">Framework</a> <a href="https://chuhung.net/tag/cong-cu-ai/" class="tag-cloud-link tag-link-248 tag-link-position-18" style="font-size: 13.782608695652pt;" aria-label="Công cụ AI (30 mục)">Công cụ AI</a> <a href="https://chuhung.net/tag/phan-tich-ky-thuat/" class="tag-cloud-link tag-link-175 tag-link-position-19" style="font-size: 13.782608695652pt;" aria-label="Phân tích kỹ thuật (30 mục)">Phân tích kỹ thuật</a> <a href="https://chuhung.net/tag/defi/" class="tag-cloud-link tag-link-188 tag-link-position-20" style="font-size: 13.326086956522pt;" aria-label="DeFi (28 mục)">DeFi</a> <a href="https://chuhung.net/tag/ios/" class="tag-cloud-link tag-link-324 tag-link-position-21" style="font-size: 12.413043478261pt;" aria-label="iOS (24 mục)">iOS</a> <a href="https://chuhung.net/tag/hieu-nang/" class="tag-cloud-link tag-link-336 tag-link-position-22" style="font-size: 11.804347826087pt;" aria-label="Hiệu năng (22 mục)">Hiệu năng</a> <a href="https://chuhung.net/tag/open-source/" class="tag-cloud-link tag-link-322 tag-link-position-23" style="font-size: 11.804347826087pt;" aria-label="Open Source (22 mục)">Open Source</a> <a href="https://chuhung.net/tag/tokenomics/" class="tag-cloud-link tag-link-305 tag-link-position-24" style="font-size: 11.195652173913pt;" aria-label="Tokenomics (20 mục)">Tokenomics</a> <a href="https://chuhung.net/tag/python/" class="tag-cloud-link tag-link-196 tag-link-position-25" style="font-size: 10.891304347826pt;" aria-label="Python (19 mục)">Python</a> <a href="https://chuhung.net/tag/google/" class="tag-cloud-link tag-link-321 tag-link-position-26" style="font-size: 10.586956521739pt;" aria-label="Google (18 mục)">Google</a> <a href="https://chuhung.net/tag/ai-coding/" class="tag-cloud-link tag-link-164 tag-link-position-27" style="font-size: 9.3695652173913pt;" aria-label="AI coding (15 mục)">AI coding</a> <a href="https://chuhung.net/tag/ethereum/" class="tag-cloud-link tag-link-199 tag-link-position-28" style="font-size: 9.0652173913043pt;" aria-label="Ethereum (14 mục)">Ethereum</a> <a href="https://chuhung.net/tag/web-framework/" class="tag-cloud-link tag-link-326 tag-link-position-29" style="font-size: 8.6086956521739pt;" aria-label="Web Framework (13 mục)">Web Framework</a> <a href="https://chuhung.net/tag/hermes/" class="tag-cloud-link tag-link-159 tag-link-position-30" style="font-size: 8pt;" aria-label="Hermes (12 mục)">Hermes</a> </div> </div> </div><!-- .tabs --> </div><div id="recent-comments-8" class="widget widget_recent_comments"><h2 class="widget-title">Bình luận gần đây</h2><ul id="recentcomments"></ul></div><div id="blogsite-recent-3" class="widget widget-blogsite-recent widget-posts-thumbnail"><h2 class="widget-title">Bài viết mới</h2><ul><li class="clear"><a href="https://chuhung.net/zig-language-tinh-nang-so-sanh-voi-rust-c-cho-system-programming/" rel="bookmark"><div class="thumbnail-wrap"><img width="300" height="150" src="https://chuhung.net/wp-content/uploads/2026/08/img_3_2-7-300x150.png" class="attachment-blogsite_widget_thumb size-blogsite_widget_thumb wp-post-image" alt="" decoding="async" /></div><div class="entry-wrap">Zig Language: Tính Năng, So Sánh Với Rust/C++ Cho System Programming</div><div class="gradient"></div></a></li><li class="post-list"><span>1</span><a href="https://chuhung.net/btc-futures-smc-price-action-phan-tich-da-khung-thoi-gian-cho-entry-chinh-xac/" rel="bookmark">BTC Futures SMC Price Action: Phân Tích Đa Khung Thời Gian Cho Entry Chính Xác</a></li><li class="post-list"><span>2</span><a href="https://chuhung.net/model-context-protocol-mcp-tieu-chuan-ket-noi-ai-agent-voi-cong-cu/" rel="bookmark">Model Context Protocol (MCP): Tiêu Chuẩn Kết Nối AI Agent Với Công Cụ</a></li><li class="post-list"><span>3</span><a href="https://chuhung.net/windows-11-24h2-tinh-nang-ai-recall-sudo-wi-fi-7-va-cach-nang-cap/" rel="bookmark">Windows 11 24H2: Tính năng AI, Recall, Sudo, Wi-Fi 7 và cách nâng cấp</a></li><li class="post-list"><span>4</span><a href="https://chuhung.net/react-19-compiler-server-components-actions-tinh-nang-moi/" rel="bookmark">React 19: Compiler, Server Components, Actions – Tính năng mới</a></li></ul></div> </aside><!-- #secondary --> </div><!-- #content .site-content --> <footer id="colophon" class="site-footer"> <div class="clear"></div> <div id="site-bottom" class="no-footer-widgets clear"> <div class="container"> <div class="site-info"> © 2026 <a href="https://chuhung.net">ChuHung.Net</a> - Chia sẻ công nghệ </div><!-- .site-info --> </div><!-- .container --> </div> <!-- #site-bottom --> </footer><!-- #colophon --> </div><!-- #page --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/blogsite-pro/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <span id='wpdUserContentInfoAnchor' style='display:none;' rel='#wpdUserContentInfo' data-wpd-lity>wpDiscuz</span><div id='wpdUserContentInfo' style='overflow:auto;background:#FDFDF6;padding:20px;width:760px;max-width:100%;border-radius:6px;' class='lity-hide'></div><div id='wpd-editor-source-code-wrapper-bg'></div><div id='wpd-editor-source-code-wrapper'><textarea id='wpd-editor-source-code'></textarea><button id='wpd-insert-source-code'>Insert</button><input type='hidden' id='wpd-editor-uid' /></div> <script> /(trident|msie)/i.test(navigator.userAgent)&&document.getElementById&&window.addEventListener&&window.addEventListener("hashchange",function(){var t,e=location.hash.substring(1);/^[A-z0-9_-]+$/.test(e)&&(t=document.getElementById(e))&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())},!1); </script> <script id="blogsite-superfish-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/superfish.js?ver=7.0.4"></script> <script id="blogsite-html5-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/html5.js?ver=7.0.4"></script> <script id="blogsite-bxslider-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/jquery.bxslider.js?ver=7.0.4"></script> <script id="tabslet-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/jquery.tabslet.js?ver=20230701"></script> <script id="blogsite-sticky-sidebar-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/theia-sticky-sidebar.js?ver=7.0.4"></script> <script id="blogsite-index-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/index.js?ver=20230701"></script> <script id="blogsite-custom-js" src="https://chuhung.net/wp-content/themes/blogsite-pro/assets/js/jquery.custom.js?ver=20230701"></script> <script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="https://chuhung.net/wp-includes/js/comment-reply.min.js?ver=7.0.4"></script> <script id="wpdiscuz-combo-js-js-extra"> var wpdiscuzAjaxObj = {"wc_hide_replies_text":"\u1ea8n tr\u1ea3 l\u1eddi","wc_show_replies_text":"Xem tr\u1ea3 l\u1eddi","wc_msg_required_fields":"H\u00e3y \u0111i\u1ec1n \u0111\u1ee7 th\u00f4ng tin cho c\u00e1c tr\u01b0\u1eddng b\u1eaft bu\u1ed9c","wc_msg_comment_is_trash":"This comment is not acceptable.","wc_msg_comment_is_spam":"This comment is not acceptable.","wc_invalid_field":"M\u1ed9t s\u1ed1 gi\u00e1 tr\u1ecb tr\u01b0\u1eddng kh\u00f4ng h\u1ee3p l\u1ec7","wc_error_empty_text":"h\u00e3y \u0111i\u1ec1n v\u00e0o tr\u01b0\u1eddng n\u00e0y \u0111\u1ec3 b\u00ecnh lu\u1eadn","wc_error_url_text":"url kh\u00f4ng h\u1ee3p l\u1ec7","wc_error_email_text":"\u0111\u1ecba ch\u1ec9 email kh\u00f4ng h\u1ee3p l\u1ec7","wc_invalid_captcha":"M\u00e3 Captcha kh\u00f4ng h\u1ee3p l\u1ec7","wc_login_to_vote":"B\u1ea1n ph\u1ea3i \u0111\u0103ng nh\u1eadp \u0111\u1ec3 b\u00ecnh ch\u1ecdn.","wc_deny_voting_from_same_ip":"B\u1ea1n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p b\u00ecnh ch\u1ecdn cho b\u00ecnh lu\u1eadn n\u00e0y","wc_self_vote":"B\u1ea1n kh\u00f4ng th\u1ec3 b\u00ecnh ch\u1ecdn cho b\u00ecnh lu\u1eadn c\u1ee7a m\u00ecnh","wc_vote_only_one_time":"B\u1ea1n \u0111\u00e3 b\u00ecnh ch\u1ecdn cho b\u00ecnh lu\u1eadn n\u00e0y","wc_voting_error":"L\u1ed7i khi \u0111\u00e1nh gi\u00e1","wc_banned_user":"You are banned","wc_rate_limit_exceeded":"Too many requests. Please slow down.","wc_comment_edit_not_possible":"Xin l\u1ed7i, b\u1ea1n kh\u00f4ng th\u1ec3 s\u1eeda b\u00ecnh lu\u1eadn n\u00e0y n\u1eefa","wc_comment_not_updated":"Xin l\u1ed7i, b\u00ecnh lu\u1eadn ch\u01b0a \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt","wc_comment_not_edited":"B\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o","wc_msg_input_min_length":"\u0110\u1ea7u v\u00e0o qu\u00e1 ng\u1eafn","wc_msg_input_max_length":"\u0110\u1ea7u v\u00e0o qu\u00e1 d\u00e0i","wc_spoiler_title":"Ti\u00eau \u0111\u1ec1 Spoiler","wc_cannot_rate_again":"B\u1ea1n kh\u00f4ng th\u1ec3 \u0111\u00e1nh gi\u00e1 l\u1ea1i","wc_not_allowed_to_rate":"B\u1ea1n kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u00e1nh gi\u00e1 \u1edf \u0111\u00e2y","wc_confirm_rate_edit":"Are you sure you want to edit your rate?","wc_follow_user":"Theo d\u00f5i ng\u01b0\u1eddi n\u00e0y","wc_unfollow_user":"H\u1ee7y theo d\u00f5i ng\u01b0\u1eddi d\u00f9ng n\u00e0y","wc_follow_success":"B\u1ea1n \u0111\u00e3 b\u1eaft \u0111\u1ea7u theo d\u00f5i t\u00e1c gi\u1ea3 c\u1ee7a b\u00ecnh lu\u1eadn n\u00e0y","wc_follow_canceled":"B\u1ea1n \u0111\u00e3 d\u1eebng theo d\u00f5i t\u00e1c gi\u1ea3 c\u1ee7a b\u00ecnh lu\u1eadn n\u00e0y.","wc_follow_email_confirm":"Vui l\u00f2ng ki\u1ec3m tra email c\u1ee7a b\u1ea1n v\u00e0 x\u00e1c nh\u1eadn y\u00eau c\u1ea7u theo d\u00f5i c\u1ee7a ng\u01b0\u1eddi d\u00f9ng.","wc_follow_email_confirm_fail":"R\u1ea5t ti\u1ebfc, ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 g\u1eedi email x\u00e1c nh\u1eadn.","wc_follow_login_to_follow":"Vui l\u00f2ng \u0111\u0103ng nh\u1eadp \u0111\u1ec3 theo d\u00f5i ng\u01b0\u1eddi d\u00f9ng.","wc_follow_impossible":"Ch\u00fang t\u00f4i r\u1ea5t ti\u1ebfc, nh\u01b0ng b\u1ea1n kh\u00f4ng th\u1ec3 theo d\u00f5i ng\u01b0\u1eddi d\u00f9ng n\u00e0y.","wc_follow_not_added":"Theo d\u00f5i kh\u00f4ng th\u00e0nh c\u00f4ng. Vui l\u00f2ng th\u1eed l\u1ea1i sau.","wc_inline_feedbacks":"Ph\u1ea3n h\u1ed3i n\u1ed9i tuy\u1ebfn","wc_inline_comments_view_all":"Xem t\u1ea5t c\u1ea3 b\u00ecnh lu\u1eadn","is_user_logged_in":"","commentListLoadType":"0","commentListUpdateType":"0","commentListUpdateTimer":"60","liveUpdateGuests":"0","wordpressThreadCommentsDepth":"5","wordpressIsPaginate":"","commentTextMaxLength":"0","replyTextMaxLength":"0","commentTextMinLength":"1","replyTextMinLength":"1","storeCommenterData":"100000","socialLoginAgreementCheckbox":"1","enableFbLogin":"0","fbUseOAuth2":"0","enableFbShare":"0","facebookAppID":"","facebookUseOAuth2":"0","enableGoogleLogin":"0","googleClientID":"","googleClientSecret":"","cookiehash":"9dcf964af69acfc977fbe24375556c36","isLoadOnlyParentComments":"0","scrollToComment":"1","commentFormView":"collapsed","enableDropAnimation":"1","isNativeAjaxEnabled":"1","userInteractionCheck":"1","enableBubble":"0","bubbleLiveUpdate":"1","bubbleHintTimeout":"45","bubbleHintHideTimeout":"10","cookieHideBubbleHint":"wpdiscuz_hide_bubble_hint","bubbleHintShowOnce":"1","bubbleHintCookieExpires":"7","bubbleShowNewCommentMessage":"1","bubbleLocation":"left_corner","firstLoadWithAjax":"0","wc_copied_to_clipboard":"Sao ch\u00e9p v\u00e0o clipboard!","inlineFeedbackAttractionType":"blink","loadRichEditor":"1","wpDiscuzReCaptchaSK":"6Ld1ZzgpAAAAAMqi3cVRLO1wwtrQlmvc7AgVktjd","wpDiscuzReCaptchaTheme":"light","wpDiscuzReCaptchaVersion":"2.0","wc_captcha_show_for_guest":"1","wc_captcha_show_for_members":"1","wpDiscuzIsShowOnSubscribeForm":"1","wmuEnabled":"1","wmuInput":"wmu_files","wmuMaxFileCount":"1","wmuMaxFileSize":"2097152","wmuPostMaxSize":"8388608","wmuIsLightbox":"1","wmuMimeTypes":{"jpg":"image/jpeg","jpeg":"image/jpeg","jpe":"image/jpeg","gif":"image/gif","png":"image/png","bmp":"image/bmp","tiff":"image/tiff","tif":"image/tiff","ico":"image/x-icon"},"wmuPhraseConfirmDelete":"B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n x\u00f3a \u0111\u00ednh k\u00e8m n\u00e0y kh\u00f4ng?","wmuPhraseNotAllowedFile":"Lo\u1ea1i t\u1ec7p kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p","wmuPhraseMaxFileCount":"S\u1ed1 l\u01b0\u1ee3ng t\u1ec7p \u0111\u01b0\u1ee3c t\u1ea3i l\u00ean t\u1ed1i \u0111a l\u00e0 1","wmuPhraseMaxFileSize":"K\u00edch th\u01b0\u1edbc t\u1ec7p t\u1ea3i l\u00ean t\u1ed1i \u0111a l\u00e0 2MB","wmuPhrasePostMaxSize":"K\u00edch th\u01b0\u1edbc b\u00e0i \u0111\u0103ng t\u1ed1i \u0111a l\u00e0 8MB","wmuPhraseDoingUpload":"Uploading in progress! Please wait.","msgEmptyFile":"File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.","msgPostIdNotExists":"ID b\u00e0i vi\u1ebft kh\u00f4ng t\u1ed3n t\u1ea1i","msgUploadingNotAllowed":"Xin l\u1ed7i, t\u1ea3i l\u00ean kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p cho b\u00e0i \u0111\u0103ng n\u00e0y","msgPermissionDenied":"B\u1ea1n kh\u00f4ng c\u00f3 \u0111\u1ee7 quy\u1ec1n \u0111\u1ec3 th\u1ef1c hi\u1ec7n h\u00e0nh \u0111\u1ed9ng n\u00e0y","wmuKeyImages":"images","wmuSingleImageWidth":"auto","wmuSingleImageHeight":"200","wmuIconVideo":"https://chuhung.net/wp-content/plugins/wpdiscuz/assets/img/file-icons/video-audio-type.png","wmuIconFile":"https://chuhung.net/wp-content/plugins/wpdiscuz/assets/img/file-icons/file-type.png","previewTemplate":"\u003Cdiv class=\"wmu-preview [PREVIEW_TYPE_CLASS]\" title=\"[PREVIEW_TITLE]\" data-wmu-type=\"[PREVIEW_TYPE]\" data-wmu-attachment=\"[PREVIEW_ID]\" data-wmu-index=\"[PREVIEW_INDEX]\"\u003E\r\n \u003Cdiv class=\"wmu-preview-remove\"\u003E\r\n \u003Cimg class=\"wmu-preview-img\" src=\"[PREVIEW_ICON]\"\u003E\r\n \u003Cdiv class=\"wmu-file-name\"\u003E[PREVIEW_FILENAME]\u003C/div\u003E\r\n \u003Cdiv class=\"wmu-preview-delete\" title=\"Delete\"\u003E\u2715\u003C/div\u003E\r\n \u003Clabel class=\"wmu-preview-replace\" title=\"Replace\"\u003E\u21bb\u003Cinput type=\"file\" style=\"display:none\" class=\"wmu-replace-input\"\u003E\u003C/label\u003E\r\n \u003C/div\u003E\r\n\u003C/div\u003E\r\n","isUserRated":"0","version":"7.6.63","wc_post_id":"5065","isCookiesEnabled":"1","loadLastCommentId":"0","dataFilterCallbacks":[],"phraseFilters":[],"scrollSize":"32","url":"https://chuhung.net/wp-admin/admin-ajax.php","customAjaxUrl":"https://chuhung.net/wp-content/plugins/wpdiscuz/utils/ajax/wpdiscuz-ajax.php","bubbleUpdateUrl":"https://chuhung.net/wp-json/wpdiscuz/v1/update","restNonce":"da966cb733","is_rate_editable":"0","menu_icon":"https://chuhung.net/wp-content/plugins/wpdiscuz/assets/img/plugin-icon/wpdiscuz-svg.svg","menu_icon_hover":"https://chuhung.net/wp-content/plugins/wpdiscuz/assets/img/plugin-icon/wpdiscuz-svg_hover.svg","nonceName":"wpdiscuz_nonce","postAttachmentsAsGallery":"","wmuPhraseNotAllowedFileType":"File type is not allowed","is_email_field_required":"0"}; var wpdiscuzUCObj = {"msgConfirmDeleteComment":"B\u1ea1n c\u00f3 ch\u1eafc l\u00e0 b\u1ea1n mu\u1ed1n xo\u00e1 b\u00ecnh lu\u1eadn n\u00e0y kh\u00f4ng?","msgConfirmCancelSubscription":"\u0110\u00f3ng c\u00e1c li\u00ean k\u1ebft tr\u01b0\u1edbc ti\u1ebfp theo\nB\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n h\u1ee7y \u0111\u0103ng k\u00fd n\u00e0y kh\u00f4ng?","msgConfirmCancelFollow":"B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n h\u1ee7y theo d\u00f5i kh\u00f4ng?","additionalTab":"0"}; //# sourceURL=wpdiscuz-combo-js-js-extra </script> <script id="wpdiscuz-combo-js-js-before"> var wpdiscuzEditorOptions = { modules: { toolbar: "", counter: { uniqueID: "", commentmaxcount : 0, replymaxcount : 0, commentmincount : 1, replymincount : 1, }, }, wc_be_the_first_text: "H\u00e3y tr\u1edf th\u00e0nh ng\u01b0\u1eddi \u0111\u1ea7u ti\u00ean b\u00ecnh lu\u1eadn!", wc_comment_join_text: "Tham gia th\u1ea3o lu\u1eadn", theme: 'snow', debug: 'error' }; //# sourceURL=wpdiscuz-combo-js-js-before </script> <script id="wpdiscuz-combo-js-js" src="https://chuhung.net/wp-content/plugins/wpdiscuz/assets/js/wpdiscuz-combo.min.js?ver=7.6.63"></script> <script id="wpdiscuz-google-recaptcha-js" src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=vi&ver=1.0.0"></script> <script id="wp-emoji-settings" type="application/json"> {"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://chuhung.net/wp-includes/js/wp-emoji-release.min.js?ver=7.0.4"}} </script> <script type="module"> /*! This file is auto-generated */ var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); //# sourceURL=https://chuhung.net/wp-includes/js/wp-emoji-loader.min.js </script> <script> (function($){ $(document).ready( function() { $('.svl_post_view_count').each( function( i ) { var $id = $(this).data('id'); var $nonce = $(this).data('nonce'); var t = this; $.get('https://chuhung.net/wp-admin/admin-ajax.php?action=svl-ajax-counter&nonce='+$nonce+'&p='+$id, function( html ) { $(t).html( html ); }); }); }); })(jQuery); </script> <!-- Back to top --> <div id="back-top"> <a href="#top" title="Back to top"><span class="genericon genericon-collapse"></span></a> </div> <!-- Sticky Sidebar --> <script type="text/javascript"> jQuery('.sidebar').theiaStickySidebar({ additionalMarginTop: 20, additionalMarginBottom: 20 }); </script><!-- Sticky Sidebar --> </body> </html>