<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Các bài viết của Andy Vũ</title>
	<atom:link href="https://thienanblog.com/author/clbphanmem/feed/" rel="self" type="application/rss+xml" />
	<link>https://thienanblog.com/author/clbphanmem/</link>
	<description>Javascript - PHP - SEO - Web Development</description>
	<lastBuildDate>Wed, 01 Jan 2025 09:56:52 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://thienanblog.com/wp-content/uploads/2017/05/TAB_favicon.ico.png</url>
	<title>Các bài viết của Andy Vũ</title>
	<link>https://thienanblog.com/author/clbphanmem/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>7 Bước Bảo Mật VPS Toàn Diện Và Hướng Dẫn Sử Dụng CloudPanel Hiệu Quả</title>
		<link>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/7-buoc-bao-mat-vps-toan-dien-va-huong-dan-su-dung-cloudpanel-hieu-qua/</link>
					<comments>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/7-buoc-bao-mat-vps-toan-dien-va-huong-dan-su-dung-cloudpanel-hieu-qua/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Wed, 01 Jan 2025 09:55:55 +0000</pubDate>
				<category><![CDATA[Thủ thuật]]></category>
		<category><![CDATA[Thủ thuật lập trình]]></category>
		<category><![CDATA[Thủ thuật máy tính]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Admin Panel]]></category>
		<category><![CDATA[bảo mật]]></category>
		<category><![CDATA[bảo mật server]]></category>
		<category><![CDATA[bảo vệ dữ liệu]]></category>
		<category><![CDATA[cách bảo mật VPS]]></category>
		<category><![CDATA[cấu hình VPS]]></category>
		<category><![CDATA[CDN Cloudflare]]></category>
		<category><![CDATA[CloudPanel]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[hướng dẫn DevOps]]></category>
		<category><![CDATA[quản lý server]]></category>
		<category><![CDATA[quản trị server]]></category>
		<category><![CDATA[SSH Key]]></category>
		<category><![CDATA[tối ưu bảo mật]]></category>
		<category><![CDATA[VPS]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=442</guid>

					<description><![CDATA[<p>Hello, lại là mình đây&#160; Hôm nay mình muốn chia sẻ với các bạn về Admin Panel và cách bảo mật mà mình đang áp dụng cho VPS. Phương pháp&#8230;</p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/7-buoc-bao-mat-vps-toan-dien-va-huong-dan-su-dung-cloudpanel-hieu-qua/">7 Bước Bảo Mật VPS Toàn Diện Và Hướng Dẫn Sử Dụng CloudPanel Hiệu Quả</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Hello, lại là mình đây&nbsp;<img decoding="async" height="16" width="16" alt="&#x1f602;" src="https://static.xx.fbcdn.net/images/emoji.php/v9/t6f/2/16/1f602.png"></p>



<p>Hôm nay mình muốn chia sẻ với các bạn về Admin Panel và cách bảo mật mà mình đang áp dụng cho VPS. Phương pháp này nhanh, nhẹ và bảo mật tốt, phù hợp cho cả người mới bắt đầu và những bạn đã có kinh nghiệm. Trong bài viết, mình sẽ trình bày các vấn đề thành từng phần để dễ theo dõi hơn.</p>



<h4 class="wp-block-heading">1. Giới thiệu về Admin Panel – CloudPanel</h4>



<p>Mình đang sử dụng CloudPanel, một Admin Panel được phát triển bởi một công ty tại Đức. Điểm nổi bật của CloudPanel là:</p>



<ul class="wp-block-list">
<li>Nhẹ nhàng và không cồng kềnh: So với các Panel như VestaCP hoặc HestiaCP, CloudPanel không bao gồm nhiều tính năng không cần thiết.</li>



<li>Hỗ trợ nền tảng mới nhất: CloudPanel tương thích với các hệ điều hành như Ubuntu LTS 24.04, Debian 12, đảm bảo các công nghệ luôn được cập nhật.</li>



<li>Hỗ trợ quản lý file qua File Manager.</li>



<li>Hỗ trợ chứng chỉ SSL miễn phí qua Let&#8217;s Encrypt.</li>



<li>Tích hợp Cloudflare và các dịch vụ CDN khác.</li>



<li>Hỗ trợ server Node.js và Python, phù hợp cho các ứng dụng cần WebSocket hoặc xử lý dữ liệu chuyên biệt.</li>
</ul>



<p>Nếu bạn muốn một Panel vừa gọn nhẹ, vừa mạnh mẽ thì CloudPanel là lựa chọn đáng cân nhắc.</p>



<h4 class="wp-block-heading">2. Các bước cơ bản bảo mật VPS</h4>



<h5 class="wp-block-heading"><strong>Vấn đề 1: Thay thế đăng nhập bằng mật khẩu bằng SSH Key</strong></h5>



<p>Phần lớn các VPS khi tạo mới sẽ cung cấp tài khoản Root/Password để truy cập SSH. Tuy nhiên, cách này dễ bị tấn công dò quét. Để bảo mật hơn:</p>



<p>Chặn đăng nhập bằng mật khẩu: Sau khi đăng nhập lần đầu, hãy vô hiệu hóa tính năng này.</p>



<p><strong>Sử dụng SSH Key:</strong></p>



<ul class="wp-block-list">
<li>Tạo cặp khóa SSH (public/private key) trên máy cá nhân.</li>



<li>Thêm khóa public vào VPS để xác thực.</li>



<li>Đảm bảo các công cụ như iptables hoặc fail2ban được cấu hình để lọc IP đăng nhập trái phép.</li>
</ul>



<h5 class="wp-block-heading"><strong>Vấn đề 2: Hạn chế truy cập Admin Panel</strong></h5>



<p>Các Admin Panel thường sử dụng một cổng mặc định (CloudPanel là cổng 8443). Để bảo mật:</p>



<ul class="wp-block-list">
<li>Chặn truy cập từ bên ngoài: Chỉ cho phép truy cập từ localhost.</li>



<li>Sử dụng SSH Tunnel: Tạo một đường hầm từ máy cá nhân đến server để map cổng, ví dụ:</li>



<li>Map 127.0.0.1:8000 (máy cá nhân) đến 127.0.0.1:8443 (server).</li>
</ul>



<p>Cách này đảm bảo chỉ bạn mới có thể truy cập Admin Panel qua SSH.</p>



<h5 class="wp-block-heading"><strong>Vấn đề 3: Hạn chế số lượng cổng mở</strong></h5>



<p>Chỉ nên mở các cổng cần thiết như:</p>



<ul class="wp-block-list">
<li>22: SSH.</li>



<li>80/443: HTTP/HTTPS.</li>
</ul>



<p>Các cổng khác nên bị chặn hoàn toàn bằng tường lửa. Điều này giúp giảm nguy cơ bị tấn công từ bên ngoài.</p>



<h4 class="wp-block-heading">3. Bảo mật dữ liệu và source code</h4>



<h5 class="wp-block-heading"><strong>Vấn đề 1: Quản lý quyền CHOWN và CHMOD</strong></h5>



<p>Khi sử dụng các công cụ như rsync để di chuyển dữ liệu, cần chú ý thiết lập đúng quyền:</p>



<ul class="wp-block-list">
<li>CHOWN: Đảm bảo tệp thuộc về đúng user.</li>



<li>CHMOD: Giới hạn quyền truy cập để tránh lỗ hổng bị khai thác.</li>



<li>Sai sót trong việc quản lý quyền có thể dẫn đến việc file độc hại được chèn vào hệ thống.</li>
</ul>



<h5 class="wp-block-heading"><strong>Vấn đề 2: Giấu IP gốc của server</strong></h5>



<p>Sử dụng các dịch vụ CDN như:</p>



<ul class="wp-block-list">
<li>Cloudflare hoặc CloudFront.</li>



<li>Dịch vụ CDN trong nước nếu cần.</li>
</ul>



<p>Các dịch vụ này sẽ giấu IP thật của server, giúp ngăn chặn các cuộc tấn công trực tiếp. Khi bị DDoS, bạn có thể điều hướng traffic hoặc tạm thời ngắt kết nối.</p>



<h5 class="wp-block-heading"><strong>Vấn đề 3: Kiểm tra và giám sát source code</strong></h5>



<p>Nếu bạn sử dụng WordPress:</p>



<ul class="wp-block-list">
<li>Cấm cài đặt plugin/theme không kiểm soát: Dùng CHMOD để ngăn chặn script không được phép.</li>



<li>Quản lý source code bằng GitHub/Bitbucket: So sánh mã nguồn giữa phiên bản gốc và hiện tại để phát hiện các thay đổi trái phép.</li>
</ul>



<p>Nếu bạn sử dụng Laravel hoặc PHP thuần:</p>



<ul class="wp-block-list">
<li>Hãy dùng Git để quản lý source code, đảm bảo mọi thay đổi đều được theo dõi.</li>
</ul>



<h4 class="wp-block-heading">5. Tổng kết</h4>



<p>Bảo mật VPS không chỉ nằm ở việc sử dụng công cụ mà còn là kiến thức và thói quen quản trị:</p>



<ul class="wp-block-list">
<li>Sử dụng SSH Key thay cho mật khẩu.</li>



<li>Hạn chế quyền truy cập Admin Panel qua SSH Tunnel.</li>



<li>Giảm thiểu số cổng mở ra Internet.</li>



<li>Quản lý quyền CHOWN/CHMOD đúng cách.</li>



<li>Sử dụng CDN để giấu IP server.</li>



<li>Theo dõi và kiểm tra source code thường xuyên.</li>



<li>Tạo User riêng biệt cho từng website.</li>
</ul>



<p>Hy vọng bài viết này sẽ giúp các bạn có cái nhìn tổng quan và nâng cao bảo mật cho VPS của mình. Nếu có ý kiến hoặc kinh nghiệm nào khác, đừng ngần ngại chia sẻ để cùng học hỏi nhé!</p>



<p></p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/7-buoc-bao-mat-vps-toan-dien-va-huong-dan-su-dung-cloudpanel-hieu-qua/">7 Bước Bảo Mật VPS Toàn Diện Và Hướng Dẫn Sử Dụng CloudPanel Hiệu Quả</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/7-buoc-bao-mat-vps-toan-dien-va-huong-dan-su-dung-cloudpanel-hieu-qua/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Website giá rẻ? Có thật sự rẻ không?</title>
		<link>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/website-gia-re-co-that-su-re-khong/</link>
					<comments>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/website-gia-re-co-that-su-re-khong/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Wed, 08 Mar 2023 02:07:06 +0000</pubDate>
				<category><![CDATA[Thủ thuật]]></category>
		<category><![CDATA[Thủ thuật lập trình]]></category>
		<category><![CDATA[bình luận]]></category>
		<category><![CDATA[chi phí]]></category>
		<category><![CDATA[coder]]></category>
		<category><![CDATA[công việc]]></category>
		<category><![CDATA[đầu tư]]></category>
		<category><![CDATA[độ hoàn thiện]]></category>
		<category><![CDATA[hiệu quả]]></category>
		<category><![CDATA[hỗ trợ]]></category>
		<category><![CDATA[lập trình viên]]></category>
		<category><![CDATA[lỗi vặt]]></category>
		<category><![CDATA[nâng cấp]]></category>
		<category><![CDATA[nhu cầu người dùng]]></category>
		<category><![CDATA[ổn định]]></category>
		<category><![CDATA[sử dụng]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[thiện cảm]]></category>
		<category><![CDATA[tiết kiệm]]></category>
		<category><![CDATA[tính năng]]></category>
		<category><![CDATA[website giá rẻ]]></category>
		<category><![CDATA[ý kiến độc giả]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=374</guid>

					<description><![CDATA[<p>Nhu cầu của con người ngày càng tăng cao, đặc biệt là trong lĩnh vực công nghệ thông tin. Một trong những nhu cầu đó là có một trang web&#8230;</p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/website-gia-re-co-that-su-re-khong/">Website giá rẻ? Có thật sự rẻ không?</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE-.png"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-375" src="https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE-.png" alt="" width="631" height="355" srcset="https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE-.png 1280w, https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE--300x169.png 300w, https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE--768x432.png 768w, https://thienanblog.com/wp-content/uploads/2023/03/CHEAP-WEBSITE-VS-EXPENSIVE-WEBSITE--1024x576.png 1024w" sizes="(max-width: 631px) 100vw, 631px" /></a></p>
<p>Nhu cầu của con người ngày càng tăng cao, đặc biệt là trong lĩnh vực công nghệ thông tin. Một trong những nhu cầu đó là có một trang web riêng cho mình hoặc cho doanh nghiệp. Tuy nhiên, nhiều người lại chọn lựa những website giá rẻ để tiết kiệm chi phí. Nhưng liệu website giá rẻ có thật sự rẻ? Chúng ta hãy cùng tìm hiểu.</p>
<h3>Tại sao có website giá rẻ?</h3>
<p>Có nhiều lý do để có những website giá rẻ. Đối với người dùng, họ muốn có một trang web cho mình nhưng lại không muốn bỏ ra quá nhiều tiền. Đối với lập trình viên, họ muốn lấy tiền nhanh chóng thông qua việc mua theme và chỉnh sửa lại để bán cho khách hàng.</p>
<h3>Website giá rẻ có thật sự rẻ? Không!</h3>
<p>Tuy nhiên, sự tiết kiệm chi phí đó lại có thể gây ra rất nhiều vấn đề cho người sử dụng. Đầu tiên, khi có những lỗi vặt xuất hiện trên trang web, người sử dụng sẽ không có được sự hỗ trợ cần thiết để khắc phục. Thứ hai, khi muốn nâng cấp hoặc thay đổi giao diện trang web, người dùng sẽ gặp rất nhiều khó khăn vì dữ liệu hiện tại không được đảm bảo. Cuối cùng, chi phí bỏ ra để chỉnh sửa, mò mẫm sẽ không đáng kể hơn so với thời gian mà người sử dụng phải bỏ ra để làm việc.</p>
<h3>Vậy còn Website với giá trị như thế nào là hợp lý?</h3>
<p>Không có con số chính xác nào để đánh giá giá trị của một trang web. Tuy nhiên, giá trị của một trang web có thể được đánh giá dựa trên sự hiệu quả trong công việc, độ hoàn thiện và sự hỗ trợ từ nhà cung cấp. Trang web tốt là trang web được thiết kế để phục vụ cho mục đích cụ thể, và được cập nhật thường xuyên để đảm bảo tính ổn định. Hơn nữa, trang web tốt cũng sẽ gây thiện cảm với khách ghé thăm vì độ hoàn thiện của nó.</p>
<h3>Tổng kết bài viết</h3>
<p>Với những lý do và khó khăn mà người sử dụng sẽ gặp phải khi sử dụng website giá rẻ, chúng ta có thể kết luận rằng không nên lựa chọn những website giá rẻ để tiết kiệm chi phí. Thay vào đó, hãy đầu tư vào một trang web có giá trị thực sự để đảm bảo tính ổn định và sự hỗ trợ tốt nhất cho công việc của mình.</p>
<h3>Ý kiến của các bạn</h3>
<p>Quý độc giả hãy chia sẻ ý kiến của mình về vấn đề này. Bạn có từng trải qua những trang web giá rẻ?</p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/website-gia-re-co-that-su-re-khong/">Website giá rẻ? Có thật sự rẻ không?</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/website-gia-re-co-that-su-re-khong/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Thành lập Group chia sẽ kiến thức về lập trình</title>
		<link>https://thienanblog.com/uncategorized/thanh-lap-group-chia-se-kien-thuc-ve-lap-trinh/</link>
					<comments>https://thienanblog.com/uncategorized/thanh-lap-group-chia-se-kien-thuc-ve-lap-trinh/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Sat, 16 May 2020 05:17:30 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chia sẽ kiến thức lập trình]]></category>
		<category><![CDATA[group chia sẽ]]></category>
		<category><![CDATA[học hỏi kinh nghiệm]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=369</guid>

					<description><![CDATA[<p>Lý do tại sao tôi thành lập Group? Như các bạn cũng biết, việc viết 1 bài Blog cũng không phải chuyện đơn giản gì. Khi tôi viết bài, tôi&#8230;</p>
<p>The post <a href="https://thienanblog.com/uncategorized/thanh-lap-group-chia-se-kien-thuc-ve-lap-trinh/">Thành lập Group chia sẽ kiến thức về lập trình</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><a href="https://thienanblog.com/wp-content/uploads/2020/05/Knowledge-Sharing-Portal-Educate-Your-Customers-Teams-and-Partners.png"><img decoding="async" class="size-full wp-image-370 aligncenter" src="https://thienanblog.com/wp-content/uploads/2020/05/Knowledge-Sharing-Portal-Educate-Your-Customers-Teams-and-Partners.png" alt="" width="850" height="480" srcset="https://thienanblog.com/wp-content/uploads/2020/05/Knowledge-Sharing-Portal-Educate-Your-Customers-Teams-and-Partners.png 850w, https://thienanblog.com/wp-content/uploads/2020/05/Knowledge-Sharing-Portal-Educate-Your-Customers-Teams-and-Partners-300x169.png 300w, https://thienanblog.com/wp-content/uploads/2020/05/Knowledge-Sharing-Portal-Educate-Your-Customers-Teams-and-Partners-768x434.png 768w" sizes="(max-width: 850px) 100vw, 850px" /></a></h3>
<h3>Lý do tại sao tôi thành lập Group?</h3>
<p>Như các bạn cũng biết, việc viết 1 bài Blog cũng không phải chuyện đơn giản gì. Khi tôi viết bài, tôi cũng phải suy nghĩ rất nhiều về cách sắp xếp bố cục, khái niệm với nhau từ đó mà người xem có thể xem và hiểu được về những bài tôi viết. Nhưng thay vào đó, tần suất để viết  1 bài sẽ thấp vì tôi không có nhiều thời gian cho chuyện này. Vì thế tôi lập ra một Group trên Facebook chủ yếu vừa chia sẽ kiến thức cho mọi người cũng như là giúp mình ôn lại kiến thức tốt hơn.</p>
<h3>Có gì đặc biệt trong đây?</h3>
<p>Trong Group này sẽ khác với Group thông thường, trong đó mọi người chỉ có thể xem bài viết hoặc đăng bài dưới sự kiểm duyệt của tôi. Vì thế, group sẽ không lẫn nhiều bài viết câu hỏi hay thảo luận, thường không có nhiều lợi ích cho người xem. Ngoài ra, những bài viết tôi viết bên trong đây cũng rút gọn thời gian cho ra 1 bài viết vì tôi ko phải sắp xếp nhiều và chỉnh chu cho nó. Cứ xem như là 1 bài chia sẽ thông thường mà các bạn thường thấy trên các diễn đàn thôi. Nhờ đó kiến thức sẽ tới người đọc dễ dàng hơn rất nhiều.</p>
<p>Hi vọng các bạn sẽ ủng hộ tôi và sân chơi này!</p>
<p>Facebook URL: <a href="https://www.facebook.com/groups/laptrinhwebvn/">https://www.facebook.com/groups/laptrinhwebvn/</a></p>
<p>The post <a href="https://thienanblog.com/uncategorized/thanh-lap-group-chia-se-kien-thuc-ve-lap-trinh/">Thành lập Group chia sẽ kiến thức về lập trình</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/uncategorized/thanh-lap-group-chia-se-kien-thuc-ve-lap-trinh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu Git LFS</title>
		<link>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/tim-hieu-git-lfs/</link>
					<comments>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/tim-hieu-git-lfs/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Mon, 28 Jan 2019 10:05:21 +0000</pubDate>
				<category><![CDATA[Thủ thuật lập trình]]></category>
		<category><![CDATA[cách cài đặt git lfs]]></category>
		<category><![CDATA[cách sử dụng git lfs]]></category>
		<category><![CDATA[git lfs cài đặt]]></category>
		<category><![CDATA[git lfs hướng dẫn]]></category>
		<category><![CDATA[git lfs là gì]]></category>
		<category><![CDATA[hướng dẫn dùng git lfs]]></category>
		<category><![CDATA[hướng dẫn git lfs]]></category>
		<category><![CDATA[hướng dẫn sử dụng git lfs]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=345</guid>

					<description><![CDATA[<p>Tìm hiểu Git LFS Git LFS (Large File Storage) là một bản mở rộng của Git được phát triển bởi Atlassian (Nổi tiếng với Bitbucket và JIRA), Github và cộng&#8230;</p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/tim-hieu-git-lfs/">Tìm hiểu Git LFS</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3><a href="https://thienanblog.com/wp-content/uploads/2019/01/git-lfs.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-351" src="https://thienanblog.com/wp-content/uploads/2019/01/git-lfs.png" alt="" width="400" height="400" srcset="https://thienanblog.com/wp-content/uploads/2019/01/git-lfs.png 400w, https://thienanblog.com/wp-content/uploads/2019/01/git-lfs-150x150.png 150w, https://thienanblog.com/wp-content/uploads/2019/01/git-lfs-300x300.png 300w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a></h3>
<h3>Tìm hiểu Git LFS</h3>
<p>Git LFS (Large File Storage) là một bản mở rộng của Git được phát triển bởi <strong>Atlassian</strong> (Nổi tiếng với Bitbucket và JIRA), <strong>Github</strong> và cộng đồng Open-Source . Git LFS giúp chúng ta tối ưu dung lượng tổng thể của 1 Repository khi Clone, Pull và Checkout trên Git bằng cách thay thế các file Media (Hình ảnh, Video, File thông thường&#8230;) thành những chuỗi text được trỏ lên Server và lưu với một cách thức khác với thông thường.</p>
<p>Git LFS sẽ giúp chúng ta giảm thiểu rất đáng kể khi chúng ta Clone, Pull hay Checkout với Repository. Khi mà trước đây nếu Repository của bạn có nhiều file lớn thì khi clone nó sẽ clone về toàn bộ Repository bao gồm tất cả File History Version (Các bản cập nhật của file) khiến dung lượng Repository của chúng ta càng ngày càng tăng.</p>
<p>Hiểu được điều này nên Git LFS được xây dựng trên kỹ thuật <strong>Lazyload</strong> (Cần thì lấy), vì thế mà khi clone, pull hay checkout source về sẽ rất nhanh và chúng ta có thể tải về các file lớn sau cũng được. Nhất là lúc cần fix code gấp mà gặp mạng mẽo bị &#8220;cá mập&#8221; cắn thì có mà than trời.</p>
<p>Một tin tốt cho các bạn là khi các bạn cài đặt Git LFS thì không ảnh hưởng nhiều đến thao tác trước giờ bạn làm với Git, các bạn chỉ cấu hình lúc đầu thôi mà còn rất là dễ nữa. Còn lại Git LFS sẽ tự động hết cho các bạn.</p>
<h3>Cài đặt Git LFS</h3>
<p><strong>Yêu cầu:</strong></p>
<ul>
<li>Đã cài đặt Git.</li>
<li>Tạo Repository để test hoặc sử dụng Repository đang có sẵn của bạn.</li>
<li>Hiều về Git trước đó là một lợi thế để bạn tiếp tục xem tiếp bài này.</li>
</ul>
<p><strong>Bước 1:</strong> Download Git LFS</p>
<ul>
<li>Windows: Truy cập vào <a href="https://git-lfs.github.com">https://git-lfs.github.com</a> và tải về bản cài đặt, hoặc khi các bạn cài Git thì sẽ có bảng Option cho bạn chọn để cài kèm với Git LFS.</li>
<li>MacOS: các bạn cần cài Brew và dùng lệnh <span class="lang:default decode:true crayon-inline ">brew install git-lfs</span> trong Terminal.</li>
<li>Linux: các bạn truy cập vào <a href="https://github.com/git-lfs/git-lfs/wiki/Installation">https://github.com/git-lfs/git-lfs/wiki/Installation</a> để rõ hơn khi cài đặt trên các phiên bản Linux khác nhau.</li>
</ul>
<p><strong>Bước 2:</strong> Chọn hoặc tạo Repository của bạn</p>
<ul>
<li>Hãy <span class="lang:default decode:true crayon-inline">cd</span> vào đúng thư mục Repository của bạn trong<strong> Git Bash/Command Prompt/Windows PowerShell</strong> (Windows) hoặc <strong>Terminal</strong> (MacOS/Linux) và gõ lệnh:</li>
</ul>
<pre class="lang:default decode:true">git lfs install</pre>
<p><strong>Bước 3:</strong> Track những file có dung lượng lớn mà bạn muốn bằng <strong>Regular Expression</strong> (Regex) với lệnh sau:</p>
<pre class="lang:default decode:true">// Track tất cả file với extension
git lfs track "*.jpg"

// Track tất cả file với nhiều extension
git lfs track "*.jpg" "*.png" "*.gif"</pre>
<ul>
<li>Ở bước này nhỡ Track lộn thì sao? Ví dụ thay vì bạn ghi là  <span class="lang:default decode:true crayon-inline ">git lfs track &#8220;*.jpg&#8221;</span> thì bạn lại ghi là <span class="lang:default decode:true crayon-inline ">git lfs track &#8220;.jpg&#8221;</span> nó không đúng với Regex nhưng Git LFS vẫn chấp nhận nhưng lại là với file đúng với tên gọi là <span class="lang:default decode:true crayon-inline ">.jpg</span>  . Lúc đó bạn hãy mở file<span class="lang:default decode:true crayon-inline "> .gitattributes</span>  lên và xóa dòng sau <span class="lang:default decode:true crayon-inline ">.jpg filter=lfs diff=lfs merge=lfs -text</span>  là xong. Cái này các bạn tự vọc đi rất dễ.</li>
</ul>
<p><strong>Bước 4:</strong> Commit và Push kèm file <span class="lang:default decode:true crayon-inline ">.gitattributes</span>  (rất quan trọng) và các file đó trong Repository sẽ bị xóa trên Git (<strong>Chỉ đối với Repository các bạn đang làm việc và đã có sẵn file trước đó</strong>) để việc setup Git LFS hoàn tất. Các bạn yên tâm nó sẽ không xóa file ở máy đâu nha, xóa file trên Git và chuyển nó ở 1 chỗ lưu trữ khác thôi.</p>
<p><a href="https://thienanblog.com/wp-content/uploads/2019/01/9.-Co-su-thay-doi-cac-file-chung-ta-commit-truoc-do-va-xuat-hien-file-moi-gitattributes-va-chung-ta-can-commit-luon.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-361" src="https://thienanblog.com/wp-content/uploads/2019/01/9.-Co-su-thay-doi-cac-file-chung-ta-commit-truoc-do-va-xuat-hien-file-moi-gitattributes-va-chung-ta-can-commit-luon.png" alt="" width="925" height="497" srcset="https://thienanblog.com/wp-content/uploads/2019/01/9.-Co-su-thay-doi-cac-file-chung-ta-commit-truoc-do-va-xuat-hien-file-moi-gitattributes-va-chung-ta-can-commit-luon.png 925w, https://thienanblog.com/wp-content/uploads/2019/01/9.-Co-su-thay-doi-cac-file-chung-ta-commit-truoc-do-va-xuat-hien-file-moi-gitattributes-va-chung-ta-can-commit-luon-300x161.png 300w, https://thienanblog.com/wp-content/uploads/2019/01/9.-Co-su-thay-doi-cac-file-chung-ta-commit-truoc-do-va-xuat-hien-file-moi-gitattributes-va-chung-ta-can-commit-luon-768x413.png 768w" sizes="auto, (max-width: 925px) 100vw, 925px" /></a></p>
<p><strong>Bước 5:</strong> Các bạn có thể kiểm tra Git LFS hoàn tất chưa có thể vào trang Repository của mình để xem, thường thì nó sẽ để là <strong>Git LFS Installed</strong> thì như vậy là hoàn tất rồi đó.</p>
<p>Như vậy sau 5 bước chúng ta đã hoàn thành cài đặt Git LFS, quá nhanh và dễ dàng đúng không các bạn. Nếu sau này các bạn Clone, Pull hay Checkout thì nếu máy bạn đã cài đặt sẵn Git LFS thì nó sẽ <strong>tự động tải về</strong> các file media cho các bạn và bạn yên tâm nó chỉ tải về những gì cần thiết cho commit bạn đang clone thôi nên rất nhẹ luôn chứ nếu mà tải hết như Git thông thường thì dẹp luôn đi chứ xài Git LFS làm gì nữa.</p>
<h3>Các vấn đề gặp phải khi sử dụng Git LFS</h3>
<p>Git LFS có rất nhiều lợi ích của nó nhưng đôi khi nó cũng có thể gây cho các bạn một số phiền phức phổ biến như sau:</p>
<ul>
<li><strong>Máy quên cài Git LFS:</strong> đối với trường hợp này thì các bạn hãy cài như trên rồi sau đó tại Repository đó các bạn chạy lệnh thủ công <span class="lang:default decode:true crayon-inline ">git lfs pull</span>  để nó tự động tải về.</li>
<li><strong>Git LFS trên MacOS và Linux</strong> đôi khi gặp trục trặc 1 chút ở vấn đề cài đặt như Permission này nọ, cái này đòi hỏi các bạn 1 chút kiến thức về Terminal thì sẽ quyết nhanh thôi.</li>
<li><strong>Khi làm việc với đồng nghiệp</strong> thì bắt buộc họ cũng phải cài đặt Git LFS nên sẽ hơi khó chịu 1 chút với những đồng nghiệp &#8220;cứng đầu&#8221; không chịu cài dù có giải thích. Những người này có thể là họ ngại làm quen cái mới hoặc Repository của họ đã quá nhỏ rồi và cũng có khi là do cái tôi lớn quá nên nói không nghe.</li>
</ul>
<p>Đó là những vấn đề sẽ xảy ra khi bạn dùng Git LFS, nếu bạn có thể giải quyết ổn thỏa hết các vấn đề trên thì &#8220;triển&#8221; thôi nào.</p>
<h3>Tìm hiểu Git LFS qua Video</h3>
<ul>
<li>Sẽ cập nhật sau&#8230;</li>
</ul>
<p>Các bạn có thể tham khảo 1 Repository mẫu về Git LFS tại đây: <a href="https://github.com/thienanblog/git-lfs-example">https://github.com/thienanblog/git-lfs-example</a></p>
<h3>Một ví dụ trước và sau khi dùng Git LFS</h3>
<p style="text-align: center;">Trước khi sử dụng Git LFS</p>
<p><a href="https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-356" src="https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua.png" alt="" width="1041" height="447" srcset="https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua.png 1041w, https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua-300x129.png 300w, https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua-768x330.png 768w, https://thienanblog.com/wp-content/uploads/2019/01/6.-thay-nang-chua-1024x440.png 1024w" sizes="auto, (max-width: 1041px) 100vw, 1041px" /></a></p>
<p style="text-align: center;">Sau khi sử dụng Git LFS</p>
<p><a href="https://thienanblog.com/wp-content/uploads/2019/01/11.-That-bat-ngo-khi-dung-luong-file-giam-ro-ret-va-xuat-hien-Git-LFS-installed-trong-Github.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-357" src="https://thienanblog.com/wp-content/uploads/2019/01/11.-That-bat-ngo-khi-dung-luong-file-giam-ro-ret-va-xuat-hien-Git-LFS-installed-trong-Github.png" alt="" width="1003" height="480" srcset="https://thienanblog.com/wp-content/uploads/2019/01/11.-That-bat-ngo-khi-dung-luong-file-giam-ro-ret-va-xuat-hien-Git-LFS-installed-trong-Github.png 1003w, https://thienanblog.com/wp-content/uploads/2019/01/11.-That-bat-ngo-khi-dung-luong-file-giam-ro-ret-va-xuat-hien-Git-LFS-installed-trong-Github-300x144.png 300w, https://thienanblog.com/wp-content/uploads/2019/01/11.-That-bat-ngo-khi-dung-luong-file-giam-ro-ret-va-xuat-hien-Git-LFS-installed-trong-Github-768x368.png 768w" sizes="auto, (max-width: 1003px) 100vw, 1003px" /></a></p>
<p>Trân trọng cám ơn độc giả đã xem qua bài viết này, mong được sự ủng hộ của các bạn ở các bài viết tới.</p>
<p>The post <a href="https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/tim-hieu-git-lfs/">Tìm hiểu Git LFS</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/thu-thuat/thu-thuat-lap-trinh/tim-hieu-git-lfs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Redux Video Series</title>
		<link>https://thienanblog.com/video-source-code/redux-video-series/</link>
					<comments>https://thienanblog.com/video-source-code/redux-video-series/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Sat, 07 Apr 2018 05:33:26 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Redux]]></category>
		<category><![CDATA[Video - Source Code]]></category>
		<category><![CDATA[async action middleware]]></category>
		<category><![CDATA[cách sử dung redux]]></category>
		<category><![CDATA[học redux]]></category>
		<category><![CDATA[hướng dẫn redux]]></category>
		<category><![CDATA[hướng dẫn redux cho người mới]]></category>
		<category><![CDATA[middleware async action]]></category>
		<category><![CDATA[middleware là gì]]></category>
		<category><![CDATA[middleware redux]]></category>
		<category><![CDATA[reducer]]></category>
		<category><![CDATA[redux aciton]]></category>
		<category><![CDATA[redux là gì]]></category>
		<category><![CDATA[redux middleware]]></category>
		<category><![CDATA[redux react]]></category>
		<category><![CDATA[redux store]]></category>
		<category><![CDATA[tìm hiểu về redux]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=340</guid>

					<description><![CDATA[<p>Trong Series này các bạn sẽ được tìm hiểu về Redux là gì một cách nhanh nhất có thể. Mọi kiến thức được tóm gọn ít nhất qua các ví&#8230;</p>
<p>The post <a href="https://thienanblog.com/video-source-code/redux-video-series/">Redux Video Series</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Trong Series này các bạn sẽ được tìm hiểu về Redux là gì một cách nhanh nhất có thể. Mọi kiến thức được tóm gọn ít nhất qua các ví dụ thực tiễn thay vì chỉ lý thuyết suông rồi mới thực hành. Nên sẽ rất phù hợp với người mới chưa biết gì về Redux sẽ nhanh chóng nắm bắt được nó hơn so với cách thông thường là phải thông qua tài liệu của Redux và làm từng bước giống họ.</p>
<p>[embedyt] https://www.youtube.com/embed?listType=playlist&amp;list=PLWk-xAvPITxFyvt3DB6Rosl5vKa9Bj7i3&amp;layout=gallery[/embedyt]</p>
<p>The post <a href="https://thienanblog.com/video-source-code/redux-video-series/">Redux Video Series</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/video-source-code/redux-video-series/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu Reducer là gì trong Javascript</title>
		<link>https://thienanblog.com/video-source-code/tim-hieu-reducer-la-gi-trong-javascript/</link>
					<comments>https://thienanblog.com/video-source-code/tim-hieu-reducer-la-gi-trong-javascript/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Wed, 04 Apr 2018 10:15:46 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Javascript cơ bản]]></category>
		<category><![CDATA[Video - Source Code]]></category>
		<category><![CDATA[reducer javascript]]></category>
		<category><![CDATA[reducer js]]></category>
		<category><![CDATA[reducer là gì]]></category>
		<category><![CDATA[reducer trong redux]]></category>
		<category><![CDATA[redux reducer]]></category>
		<category><![CDATA[tìm hiểu reducer]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=334</guid>

					<description><![CDATA[<p>Reducer là gì? Chắc hẳn đây là câu hỏi mà đa số người dùng sử dụng qua thư viện của Redux hoặc vô tình biết qua phương thức reduce() này&#8230;</p>
<p>The post <a href="https://thienanblog.com/video-source-code/tim-hieu-reducer-la-gi-trong-javascript/">Tìm hiểu Reducer là gì trong Javascript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Reducer là gì? Chắc hẳn đây là câu hỏi mà đa số người dùng sử dụng qua thư viện của Redux hoặc vô tình biết qua phương thức reduce() này nên sẽ thắc mắc về nó.</p>
<p>(Bài viết này có bao gồm một số kiến thức ở bài <a href="https://thienanblog.com/javascript/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/">Tìm hiểu về Mutable và Immutable Object trong Javascript</a>)</p>
<p>Reducer được dùng thay thế cho vòng lặp ở một số nhiệm vụ nhất định, giúp cho việc viết Code nhanh hơn. Nên các bạn cũng không cần quá bận tâm nếu như các bạn thật sự không thích cách làm việc này của nó mà có thể thay thế bằng các vòng lặp khác như for, foreach, map&#8230;</p>
<p>[embedyt] https://www.youtube.com/watch?v=fUC3u-srdUA[/embedyt]</p>
<p>Source: <a href="https://jsbin.com/fatifam/2/edit?js,console">https://jsbin.com/fatifam/2/edit?js,console</a></p>
<p>The post <a href="https://thienanblog.com/video-source-code/tim-hieu-reducer-la-gi-trong-javascript/">Tìm hiểu Reducer là gì trong Javascript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/video-source-code/tim-hieu-reducer-la-gi-trong-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu về Mutable và Immutable Object trong Javascript</title>
		<link>https://thienanblog.com/video-source-code/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/</link>
					<comments>https://thienanblog.com/video-source-code/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Sun, 01 Apr 2018 13:16:27 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Javascript cơ bản]]></category>
		<category><![CDATA[Video - Source Code]]></category>
		<category><![CDATA[immutable là gì]]></category>
		<category><![CDATA[immutable object là gì]]></category>
		<category><![CDATA[immutable redux]]></category>
		<category><![CDATA[mutable là gì]]></category>
		<category><![CDATA[mutable object là gì]]></category>
		<category><![CDATA[mutable và immutable]]></category>
		<category><![CDATA[mutable và immutable có gì khác]]></category>
		<category><![CDATA[sự khác nhau giữa mutable và immutable]]></category>
		<category><![CDATA[tại sao nên dùng immutable]]></category>
		<category><![CDATA[xu hướng lập trình immutable]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=331</guid>

					<description><![CDATA[<p>Bắt kịp với xu hướng mới, trong Video này chúng ta cùng tìm hiểu về 2 khái niệm Mutable Object và Immutable Object khác nhau như thế nào? Và tại&#8230;</p>
<p>The post <a href="https://thienanblog.com/video-source-code/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/">Tìm hiểu về Mutable và Immutable Object trong Javascript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Bắt kịp với xu hướng mới, trong Video này chúng ta cùng tìm hiểu về 2 khái niệm Mutable Object và Immutable Object khác nhau như thế nào? Và tại sao chúng ta nên sử dụng chúng? Nhất là xu thế hiện tại rất chuộng bộ đôi &#8220;sát thủ&#8221; React + Redux. Hãy cùng tôi tìm hiểu nó các bạn nhé!</p>
<p>[embedyt] https://www.youtube.com/watch?v=hMd_nr1dexg[/embedyt]</p>
<p>The post <a href="https://thienanblog.com/video-source-code/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/">Tìm hiểu về Mutable và Immutable Object trong Javascript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/video-source-code/tim-hieu-ve-mutable-va-immutable-object-trong-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu Component trong ReactJS</title>
		<link>https://thienanblog.com/javascript/reactjs/tim-hieu-component-trong-reactjs/</link>
					<comments>https://thienanblog.com/javascript/reactjs/tim-hieu-component-trong-reactjs/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Wed, 18 Oct 2017 03:16:08 +0000</pubDate>
				<category><![CDATA[ReactJS]]></category>
		<category><![CDATA[cách viết component reactjs]]></category>
		<category><![CDATA[component jsx]]></category>
		<category><![CDATA[component là gì]]></category>
		<category><![CDATA[component react]]></category>
		<category><![CDATA[component reactjs]]></category>
		<category><![CDATA[component trong react]]></category>
		<category><![CDATA[component trong reactjs]]></category>
		<category><![CDATA[viết component reactjs]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=321</guid>

					<description><![CDATA[<p>Trong ReactJS, mỗi đoạn code sẽ được phân chia thành những Component không lệ thuộc lẫn nhau và có thể tái sử dụng khi cần thiết. Vì vậy trong bài&#8230;</p>
<p>The post <a href="https://thienanblog.com/javascript/reactjs/tim-hieu-component-trong-reactjs/">Tìm hiểu Component trong ReactJS</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Trong ReactJS, mỗi đoạn code sẽ được phân chia thành những Component không lệ thuộc lẫn nhau và có thể tái sử dụng khi cần thiết. Vì vậy trong bài viết này chúng ta sẽ tìm hiểu cách viết và sử dụng Component như thế nào trong ReactJS.</p>
<h3>Yêu cầu trong bài viết</h3>
<div>Bài viết này được viết trên nền tảng JavaScript ES6 + Babel Compiler có sẵn trong <span class="lang:default decode:true  crayon-inline ">create-react-app</span> . Vì thế, các bạn hãy tập làm quen với các cú pháp mới và &#8220;lạ&#8221; trong bài viết này.</div>
<div></div>
<h3>Cú pháp</h3>
<div>Để khởi tạo Component chúng ta sẽ có nhiều cách như sau:</div>
<ul>
<li>Dùng let, const trong JavaScript ES6 hoặc var ở các phiên bản JavaScript thấp hơn.</li>
<li>Dùng Function.</li>
<li>Dùng Class trong JavaScript ES6.</li>
</ul>
<h3>Ví dụ</h3>
<pre class="lang:default decode:true ">import React, { Component } from 'react';

// Ví dụ 1
let Tab_let = () =&gt; {
  return (
    &lt;div&gt;Khởi tạo bằng let&lt;/div&gt;
  );
};

// Ví dụ 2
const Tab_const = () =&gt; {
  return (
    &lt;div&gt;Khởi tạo bằng const&lt;/div&gt;
  );
};

// Ví dụ 3 - const hoặc let đều được
const Tab_shorthand = () =&gt; (
  &lt;div&gt;Cách tắt khi dùng Arrow Function&lt;/div&gt;
);

// Ví dụ 4
function Tab_function() {
  return (
    &lt;div&gt;Khởi tạo bằng Function&lt;/div&gt;
  );
}

// Ví dụ 5
class Tab_class extends Component {
  render() {
    return (
      &lt;div&gt;Khởi tạo bằng Class&lt;/div&gt;
    );
  }
}</pre>
<div>Qua ví dụ trên thì khi dùng let hoặc const, chúng ta cần dùng <a href="https://thienanblog.com/javascript/su-khac-biet-giua-arrow-function-va-function-thong-thuong/">Arrow Function</a> hoặc <a href="https://thienanblog.com/javascript/javascript-co-ban/bai-6-anonymous-function-va-closure/">Anonymous Function</a> để gán vào cho biến hoặc hằng. Trong khi Function có cách dùng tương tự cách định nghĩa biến và hằng thì Class lại phải kế thừa từ Class Component trong ReactJS để có thể chạy được.</div>
<div></div>
<div>Ở ví dụ 3, các bạn nên lưu ý là cú pháp dùng 2 dấu <span class="lang:default decode:true  crayon-inline">(&#8230;)</span>  này có ý nghĩa là vừa vừa <strong>return</strong> như ví dụ 2 và vừa <strong>tạo ra JSX</strong> ở bên trong nó. Chúng ta sẽ tìm hiểu sâu hơn về JSX ở những bài sau nên bài này các bạn &#8220;chịu khó&#8221; vẫn chưa hiểu nó nhé.</div>
<div></div>
<div>Tiếp tục sau khi khởi tạo, tên của biến, hằng, function và class sẽ trở thành 1 Component với HTML Tag là <span class="lang:default decode:true  crayon-inline ">&lt;tenBien /&gt;</span> . <strong>Nên nhớ là HTML Tag phải là thẻ tự đóng</strong>, còn khi nào thì nên dùng thẻ bao thì tôi sẽ nói rõ khi chúng ta tìm hiểu tới khái niệm về Props (Properties).</div>
<div></div>
<div>
<h3>Cách sử dụng</h3>
<div>Chúng ta chỉ đơn giản sử dụng tên thẻ như trước đó tôi đã đề cập vào bất kỳ vị trí nào nằm bên trong phạm vi sử dụng React. Chắc có lẽ sẽ có nhiều bạn đến khúc này sẽ bị lấn cấn đó là làm sao biết phạm vi của React là ở đâu? Và nó đã được khởi tạo như thế nào?</div>
<div></div>
<div>Quay lại bài viết trước, các bạn có nhớ rằng khi các bạn tạo dựng ReactJS bằng cách dùng <span class="lang:default decode:true  crayon-inline ">create-react-app</span> , chúng ta đã thấy qua file <span class="lang:default decode:true  crayon-inline ">index.js</span>  trong thư mục <span class="lang:default decode:true  crayon-inline ">src</span>  chứ. Vâng, chính là nó! Tôi sẽ giải thích cho các bạn qua cấu trúc file <span class="lang:default decode:true  crayon-inline ">public/index.html</span>  và <span class="lang:default decode:true  crayon-inline ">src/index.js</span>  bằng hình ảnh sau:</div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-322 size-full" src="https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure.png" alt="1.index-html-index-js-structure.png" width="1279" height="826" srcset="https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure.png 1279w, https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure-300x194.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure-768x496.png 768w, https://thienanblog.com/wp-content/uploads/2017/10/1.index-html-index-js-structure-1024x661.png 1024w" sizes="auto, (max-width: 1279px) 100vw, 1279px" /></a></div>
<div>
<div></div>
<div>Hình ảnh trên chứa các phương thức mặc định dùng để khởi động ReactJS cũng như trỏ tới <span class="lang:default decode:true  crayon-inline ">&lt;div id=&#8221;root&#8221;&gt;&lt;/div&gt;</span>  để nhận biết đâu là vùng hoạt động của ReactJS. Tiếp tục, chúng ta quay trở lại file <span class="lang:default decode:true  crayon-inline ">App.js</span>  và thêm những Component mà chúng ta đã viết ở trên vào:</div>
</div>
</div>
<div></div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-323 size-full" src="https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app.png" alt="2.add-to-app" width="1109" height="826" srcset="https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app.png 1109w, https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app-300x223.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app-768x572.png 768w, https://thienanblog.com/wp-content/uploads/2017/10/2.add-to-app-1024x763.png 1024w" sizes="auto, (max-width: 1109px) 100vw, 1109px" /></a></div>
<div></div>
<div>
<div>Và kết quả nhận được:</div>
</div>
<div></div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/3.result.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-324 size-full" src="https://thienanblog.com/wp-content/uploads/2017/10/3.result.png" alt="result" width="1217" height="454" srcset="https://thienanblog.com/wp-content/uploads/2017/10/3.result.png 1217w, https://thienanblog.com/wp-content/uploads/2017/10/3.result-300x112.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/3.result-768x287.png 768w, https://thienanblog.com/wp-content/uploads/2017/10/3.result-1024x382.png 1024w" sizes="auto, (max-width: 1217px) 100vw, 1217px" /></a></div>
<div>
<div></div>
<h3>Lời kết</h3>
<div>Như vậy, chúng ta đã tạo ra những Component trong ReactJS bằng nhiều cú pháp khác nhau và kết hợp với cú pháp JSX để tạo ra React Element. Vậy JSX là gì? Component chỉ có vậy thôi sao? Hãy đón xem tiếp ở phần sau các bạn nhé.</div>
</div>
<p>The post <a href="https://thienanblog.com/javascript/reactjs/tim-hieu-component-trong-reactjs/">Tìm hiểu Component trong ReactJS</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/javascript/reactjs/tim-hieu-component-trong-reactjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu ReactJS và hướng dẫn cài đặt</title>
		<link>https://thienanblog.com/javascript/reactjs/tim-hieu-reactjs/</link>
					<comments>https://thienanblog.com/javascript/reactjs/tim-hieu-reactjs/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Mon, 16 Oct 2017 17:46:23 +0000</pubDate>
				<category><![CDATA[ReactJS]]></category>
		<category><![CDATA[cách sử dụng react]]></category>
		<category><![CDATA[cách sử dụng reactjs]]></category>
		<category><![CDATA[cài đặt react]]></category>
		<category><![CDATA[cài đặt reactjs]]></category>
		<category><![CDATA[hướng dẫn react]]></category>
		<category><![CDATA[hướng dẫn reactjs]]></category>
		<category><![CDATA[react là gì]]></category>
		<category><![CDATA[reactjs là gì]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=300</guid>

					<description><![CDATA[<p>ReactJS là một thư viện JavaScript dùng trong việc xây dựng giao diện người dùng và được phát triển bởi đội ngũ Facebook. Tới nay, ReactJS đã thu hút hàng&#8230;</p>
<p>The post <a href="https://thienanblog.com/javascript/reactjs/tim-hieu-reactjs/">Tìm hiểu ReactJS và hướng dẫn cài đặt</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>ReactJS là một thư viện JavaScript dùng trong việc xây dựng giao diện người dùng và được phát triển bởi đội ngũ Facebook. Tới nay, ReactJS đã thu hút hàng triệu lập trình viên trên thế giới. ReactJS thường được dùng bởi Frontend Developer trong thiết kế Web Application một cách nhanh chóng hơn. Vậy để tìm hiểu ReactJS, chúng ta phải tìm hiểu từ đâu? Và cần gì để chạy được ReactJS? Qua bài viết này, các bạn đọc giả sẽ hiểu được cách cài đặt và sử dụng ReactJS một cách đơn giản nhất.</p>
<h3>Yêu cầu</h3>
<ul>
<li>Cài đặt NodeJS phiên bản mới &gt;= 6 (LTS hoặc bản hiện tại &#8211; <a href="https://nodejs.org/en/download/">https://nodejs.org/en/download/</a>)</li>
<li>Cài đặt Visual Studio Code/Sublime Text hoặc WebStorm (tùy chọn)</li>
</ul>
<h3>Cài đặt</h3>
<div>Đầu tiên, các bạn phải chắc chắn rằng mình đã cài đặt đúng phiên bản NodeJS và có NPM bằng cách gõ vào cửa sổ Command Prompt/Windows Powershell hay Terminal trên Mac và Linux:</div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/1.node-npm-version.png"><img loading="lazy" decoding="async" class="size-full wp-image-301 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/1.node-npm-version.png" alt="" width="625" height="352" srcset="https://thienanblog.com/wp-content/uploads/2017/10/1.node-npm-version.png 625w, https://thienanblog.com/wp-content/uploads/2017/10/1.node-npm-version-300x169.png 300w" sizes="auto, (max-width: 625px) 100vw, 625px" /></a></div>
<div></div>
<div>Như ở trên, các bạn cũng đã thấy phiên bản hiện tại của NodeJS là 8.6.0 và như thế là đã đạt tiêu chuẩn của ReactJS, còn NPM khi bạn cài các phiên bản 8.x trở lên thì NPM cũng đã ở phiên bản 5.x. Vì thế các bạn hãy kiểm tra kỹ, tránh tình trạng cài nhầm NPM phiên bản thấp hơn khi xài các thư viện khác khi thư viên đó đòi hỏi 1 phiên bản NodeJS hoặc NPM thấp hơn để có thể chạy ổn định.</div>
<div></div>
<div>Tiếp tục, chúng ta sẽ tiến hành cài đặt ReactJS thông qua Package đã được viết sẵn cho chúng ta bằng cách gõ vào lệnh <span class="lang:default decode:true crayon-inline ">npm install -g create-react-app</span>  và nó sẽ cài đặt như hình bên dưới:</div>
<div></div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/2.install-create-react-app.png"><img loading="lazy" decoding="async" class="size-full wp-image-302 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/2.install-create-react-app.png" alt="" width="625" height="352" srcset="https://thienanblog.com/wp-content/uploads/2017/10/2.install-create-react-app.png 625w, https://thienanblog.com/wp-content/uploads/2017/10/2.install-create-react-app-300x169.png 300w" sizes="auto, (max-width: 625px) 100vw, 625px" /></a></div>
<div></div>
<div></div>
<div>Sau khi cài đặt hoàn tất, các bạn có thể gõ tiếp lệnh theo cú pháp sau:</div>
<div>
<pre class="lang:default decode:true ">create-react-app thienanblog</pre>
<p>Trong đó <span class="lang:default decode:true crayon-inline" style="color: #ff0000;">thienanblog</span>  là tên Folder mà các bạn ấn định nên không cần phải làm theo bài viết. Tuy nhiên với những bạn không rành thì trước mắt cứ làm theo đi đã, để dễ dàng theo dõi bài viết hơn.</p>
</div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/3.installing-reactjs.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-303" src="https://thienanblog.com/wp-content/uploads/2017/10/3.installing-reactjs.png" alt="" width="700" height="514" srcset="https://thienanblog.com/wp-content/uploads/2017/10/3.installing-reactjs.png 1010w, https://thienanblog.com/wp-content/uploads/2017/10/3.installing-reactjs-300x220.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/3.installing-reactjs-768x564.png 768w" sizes="auto, (max-width: 700px) 100vw, 700px" /></a></div>
<div></div>
<div></div>
<div>Quá trình cài đặt hoàn tất, các bạn cũng sẽ thấy ứng dụng trả về cho chúng ta cách thức để khởi chạy ReactJS như sau:</div>
<div></div>
<div></div>
<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/4.install-done.png"><img loading="lazy" decoding="async" class="size-full wp-image-304 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/4.install-done.png" alt="" width="704" height="463" srcset="https://thienanblog.com/wp-content/uploads/2017/10/4.install-done.png 704w, https://thienanblog.com/wp-content/uploads/2017/10/4.install-done-300x197.png 300w" sizes="auto, (max-width: 704px) 100vw, 704px" /></a></div>
<div>
<div></div>
<div>Tôi sẽ giải thích cho các bạn các cú pháp họ đã đính kèm cho chúng ta:</div>
<ul>
<li><span class="lang:default decode:true crayon-inline">npm start</span>  : tiến hành khởi tạo Server phát triển để chạy ReactJS trên môi trường Web của NodeJS.</li>
<li><span class="lang:default decode:true crayon-inline">npm run build</span>  : tiến hành xây dựng sản phẩm sau khi hoàn tất giai đoạn phát triển, bao gồm sẽ copy các file tĩnh đi kèm khi các bạn bỏ vào đúng thư mục chỉ định (Các bạn có thể xem chi tiết ở 1 bài viết khác trong Blog này).</li>
<li><span class="lang:default decode:true crayon-inline">npm test</span>  : tiến hành kiểm thử ứng dụng (Dành cho các bạn biết qua về thư viện Tester).</li>
<li><span class="lang:default decode:true crayon-inline">npm run eject</span>  : khi các bạn chạy lệnh này, tool này sẽ không còn tự động hóa mọi vấn đề khi phát triển nữa mà nó sẽ bung ra toàn bộ các config để những bạn nào am hiểu về Webpack hay Babel&#8230; có thể config lại theo ý đồ của mình (Không khuyến khích các bạn không rành). <strong>Nên nhớ, một khi đã chạy mà quên backup thì &#8220;toi&#8221; luôn nhé.</strong></li>
</ul>
<p>Như vậy ở bên trên các bạn cũng đã tìm hiểu qua 1 số lệnh cơ bản của ReactJS rồi, giờ thì chạy thôi nào:</p>
<pre class="lang:default decode:true ">cd thienanblog
npm start</pre>
</div>
<p><a href="https://thienanblog.com/wp-content/uploads/2017/10/5.run-reactjs.png"><img loading="lazy" decoding="async" class="wp-image-305 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/5.run-reactjs.png" alt="" width="700" height="514" srcset="https://thienanblog.com/wp-content/uploads/2017/10/5.run-reactjs.png 1010w, https://thienanblog.com/wp-content/uploads/2017/10/5.run-reactjs-300x220.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/5.run-reactjs-768x564.png 768w" sizes="auto, (max-width: 700px) 100vw, 700px" /></a></p>
<p>&nbsp;</p>
<p>Một cửa sổ sẽ hiện lên và các bạn thấy ReactJS đã chạy rồi đấy:</p>
<p>&nbsp;</p>
<p><a href="https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser.png"><img loading="lazy" decoding="async" class="wp-image-306 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser.png" alt="" width="700" height="589" srcset="https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser.png 1218w, https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser-300x252.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser-768x646.png 768w, https://thienanblog.com/wp-content/uploads/2017/10/6.reactjs-on-browser-1024x861.png 1024w" sizes="auto, (max-width: 700px) 100vw, 700px" /></a></p>
<p>&nbsp;</p>
<p>Xong như vậy là chúng ta đã hoàn tất cách cài đặt ReactJS. Chuyển sang tinh chỉnh một số File nào. Bạn hãy vào trong thư mục <span class="lang:default decode:true crayon-inline ">src</span>  và tìm file <span class="lang:default decode:true crayon-inline">App.js</span>  như hình:</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-307" src="https://thienanblog.com/wp-content/uploads/2017/10/7.reactjs-app-js.png" alt="" width="700" height="527" srcset="https://thienanblog.com/wp-content/uploads/2017/10/7.reactjs-app-js.png 1010w, https://thienanblog.com/wp-content/uploads/2017/10/7.reactjs-app-js-300x226.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/7.reactjs-app-js-768x579.png 768w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>&nbsp;</p>
<p>Sau đó tinh chỉnh lại như sau và save lại:</p>
<p>&nbsp;</p>
<pre class="lang:js decode:true ">/// ...
class App extends Component {
  render() {
    return (
      &lt;div className="App"&gt;
        &lt;header className="App-header"&gt;
          &lt;img src={logo} className="App-logo" alt="logo" /&gt;
          &lt;h1 className="App-title"&gt;Chào mừng tới React tại Thienanblog&lt;/h1&gt;
        &lt;/header&gt;
        &lt;p className="App-intro"&gt;
          &lt;ThienanBlog /&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    );
  }
}
/// ...</pre>
<p>Lập tức màn hình Browser sẽ tự động Reload lại mà không cần bạn phải F5. Đó chính là do NodeJS vẫn đang chạy, nên vì thế nó sẽ nhận biết được khi nào các bạn thay đổi nội dung trong file.</p>
<h3>Viết Component đơn giản</h3>
<p>Tiếp tục, chúng ta sẽ viết ngay 1 Component đơn giản nhất trong ReactJS bằng cách gõ vào đoạn Code sau:</p>
<pre class="lang:js decode:true ">function ThienanBlog() {
  return (
    &lt;div&gt;Thienanblog xin chào các bạn độc giả&lt;/div&gt;
  );
}</pre>
<p>Đoạn code trên chắc chắn sẽ có rất nhiều bạn thấy dòng code &#8220;quái lạ&#8221;&#8230; làm thế nào mà có HTML gì đó ở trong đây vậy? Đó chính là JSX đấy các bạn ạ và nó là gì thì từ từ rồi chúng ta sẽ biết, đừng vội nản các bạn nhé. Và nội dung file <span class="lang:default decode:true crayon-inline ">App.js</span>  sẽ như sau:</p>
<pre class="lang:js decode:true ">import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
function ThienanBlog() {
  return (
    &lt;div&gt;Thienanblog xin chào các bạn độc giả&lt;/div&gt;
  );
}
class App extends Component {
  render() {
    return (
      &lt;div className="App"&gt;
        &lt;header className="App-header"&gt;
          &lt;img src={logo} className="App-logo" alt="logo" /&gt;
          &lt;h1 className="App-title"&gt;Chào mừng tới React tại Thienanblog&lt;/h1&gt;
        &lt;/header&gt;
        &lt;p className="App-intro"&gt;
          &lt;ThienanBlog /&gt;
        &lt;/p&gt;
      &lt;/div&gt;
    );
  }
}
export default App;</pre>
<p>&nbsp;</p>
<p>Sau đó, các bạn save lại và xem lại kết quả của chúng ta:</p>
<p>&nbsp;</p>
<p><a href="https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-308" src="https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done.png" alt="" width="700" height="589" srcset="https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done.png 1218w, https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done-300x252.png 300w, https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done-768x646.png 768w, https://thienanblog.com/wp-content/uploads/2017/10/8-reactjs-app-done-1024x861.png 1024w" sizes="auto, (max-width: 700px) 100vw, 700px" /></a></p>
<h3>Lời kết</h3>
<div>Như vậy, chúng ta đã tìm hiểu ReactJS và cách cài đặt như thế nào, cũng như đã tự viết ra 1 Component đầu tiên cho mình. Hãy theo từng bước và thử lại nhiều lần ở các vấn đề mà bạn khó hiểu, vì sắp tới chúng ta còn phải tìm hiểu tiếp về Component và JSX các bạn nhé.</div>
<p>The post <a href="https://thienanblog.com/javascript/reactjs/tim-hieu-reactjs/">Tìm hiểu ReactJS và hướng dẫn cài đặt</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/javascript/reactjs/tim-hieu-reactjs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tìm hiểu Array Object trong JavaScript</title>
		<link>https://thienanblog.com/javascript/javascript-co-ban/tim-hieu-array-object-trong-javascript/</link>
					<comments>https://thienanblog.com/javascript/javascript-co-ban/tim-hieu-array-object-trong-javascript/#respond</comments>
		
		<dc:creator><![CDATA[Ân Vũ]]></dc:creator>
		<pubDate>Sat, 07 Oct 2017 06:46:49 +0000</pubDate>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Javascript cơ bản]]></category>
		<category><![CDATA[array object es6]]></category>
		<category><![CDATA[Array Object Javascript]]></category>
		<category><![CDATA[Array Object là gì]]></category>
		<category><![CDATA[cách sử dụng array object]]></category>
		<category><![CDATA[mảng chứa các đối tượng]]></category>
		<category><![CDATA[mảng đối tượng]]></category>
		<category><![CDATA[tại sao nên sử dụng array object]]></category>
		<category><![CDATA[Tìm hiểu về Array Object]]></category>
		<guid isPermaLink="false">https://thienanblog.com/?p=291</guid>

					<description><![CDATA[<p>Array Object là một mảng chứa các phần tử, cho phép truy xuất các phương thức của Object bên trong nó để đáp ứng các nhu cầu xử lý dữ&#8230;</p>
<p>The post <a href="https://thienanblog.com/javascript/javascript-co-ban/tim-hieu-array-object-trong-javascript/">Tìm hiểu Array Object trong JavaScript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div><a href="https://thienanblog.com/wp-content/uploads/2017/10/array-object.png"><img loading="lazy" decoding="async" class=" wp-image-295 aligncenter" src="https://thienanblog.com/wp-content/uploads/2017/10/array-object.png" alt="array-object" width="493" height="404" srcset="https://thienanblog.com/wp-content/uploads/2017/10/array-object.png 638w, https://thienanblog.com/wp-content/uploads/2017/10/array-object-300x246.png 300w" sizes="auto, (max-width: 493px) 100vw, 493px" /></a></div>
<div>Array Object là một mảng chứa các phần tử, cho phép truy xuất các phương thức của Object bên trong nó để đáp ứng các nhu cầu xử lý dữ liệu khác nhau khi mà Array chỉ có tác dụng duy nhất là lấy phần tử trong nó ra. Trong bài này, chúng ta cùng tìm hiểu Array Object nhé.</div>
<div></div>
<p><span id="more-291"></span></p>
<h3>Tại sao nên sử dụng Array Object ?</h3>
<div>Có rất nhiều lý do để có thể sử dụng Array Object mà tôi không thể liệt kê hết được cho các bạn, nhưng ở đây tôi sẽ tóm tắt một cách vắn tắt cho các bạn:</div>
<ul>
<li>Bạn có nhu cầu thể hiện dữ liệu trong mảng bằng nhiều cách khác nhau.</li>
<li>Bạn có nhu cầu thể hiện kiểu dữ liệu của Object chứa bên trong mảng.</li>
<li>Bạn có nhu cầu thể hiện gợi ý các phương thức trong Visual Studio Code hoặc JavaScript IDE bất kỳ, rất phù hợp khi sử dụng trong TypeScript hay Babel.</li>
<li>Bạn có nhu cầu thể hiện kỹ năng viết Code của mình trước các nhà tuyển dụng hoặc các thành viên trong Team.</li>
</ul>
<h3>Mặt hạn chế của Array Object</h3>
<div>Tiếp theo sau những lợi ích của Array Object thì cũng tồn tại một số nhược điểm khi sử dụng nó:</div>
<ul>
<li>Làm chậm ứng dụng của bạn so với việc sử dụng Array thông thường.</li>
<li>Chỉ hữu ích khi bạn sử dụng một mảng dữ liệu nhưng ở nhiều mục đích khác nhau.</li>
<li>Bạn cần có kiến thức nhất định về Lập trình hướng đối tượng để sử dụng thành thạo.</li>
</ul>
<h3>Một số ví dụ khi sử dụng Array Object</h3>
<div><p class='codepen'  data-height='365' data-theme-id='0' data-slug-hash='mBXKMP' data-default-tab='js,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen Array Object trong JavaScript by An Vu (@thienanblog) on CodePen.</p>
</div>
<div>Chuyển ví dụ trên theo chuẩn JavaScript ES6 (Xem thêm <a href="https://thienanblog.com/javascript/cu-phap-es6-es2015-trong-javascript/" target="_blank" rel="noopener">Tìm hiểu về một số cú pháp ES6 trong JavaScript</a>).</div>
<div><p class='codepen'  data-height='365' data-theme-id='0' data-slug-hash='zERaPe' data-default-tab='js,result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen Array Object trong JavaScript ES6 by An Vu (@thienanblog) on CodePen.</p>
</div>
<h3>Lời kết</h3>
<div>Mong rằng qua ví dụ trên, các bạn đã có thể hiểu thêm về Array Object trong JavaScript. Thật sự mà nói, Array Object không có gì là mới cả nếu như các bạn đã từng biết qua về JSON hoặc chính JavaScript này là tập hợp của các Array Object (Object <span class="lang:default decode:true crayon-inline ">window</span>  là một ví dụ). Thay vì JSON trả về cho các bạn chỉ là chuỗi và sau đó được <span class="lang:default decode:true crayon-inline ">JSON.parse(&#8230;)</span>  thành 1 Array Object và bạn có thể truy xuất tới các thuộc tính chứa dữ liệu của nó, thì nay nó chỉ khác là chúng ta bổ sung thêm các phương thức cho 1 Object bên trong Array để sử dụng nó cho nhiều mục đích khác nhau theo nhu cầu của mình.</div>
<p>The post <a href="https://thienanblog.com/javascript/javascript-co-ban/tim-hieu-array-object-trong-javascript/">Tìm hiểu Array Object trong JavaScript</a> appeared first on <a href="https://thienanblog.com">Thien An Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thienanblog.com/javascript/javascript-co-ban/tim-hieu-array-object-trong-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
