Thứ Năm, 21 tháng 12, 2017
- tháng 12 21, 2017
- Nguyễn Văn Tiềm
- AutoIT, Chrome, Facebook, Malware
- No comments
Thứ Hai, 11 tháng 12, 2017
- tháng 12 11, 2017
- Nguyễn Văn Tiềm
- hosting-domain
- No comments
Bước 1: Sau khi đăng ký tên miền miễn phí thành công hãy trở lại Blog của bạn nhé vào
Blog => Mẫu => Cài đặt => Thiết lập URL của bên thứ 3 cho blog của bạn| Sau đó nhập tên miền bạn vừa mới đăng ký vào ở đây của mình là www.quangmen01.tk (và nhớ thêm .www vào đằng trước nhé) sau đó bấm lưu nó sẽ hiện ra thông báo tương tự như thế này hãy để nhứ thế rồi làm tiếp Bước 2 (Lưu ýCopy 1, Copy 2, Copy 3 và Copy 4 nhé để mình làm ở Bước 2)
Bước 2: Bạn truy cập vào trang này https://asia.cloudns.net/ (Nên sử dụng gmail bạn đăng ký ởhttps://my.freenom.com) rồi tạo một tài khoản nhé (trang này đăng ký tài khoản dễ hơn ăn ớt) sau đó vào gmail đăng ký để xác nhận tài khoản nhé.
Cơ bản thì trong trang quản lý của https://my.freenom.com thì không có cho trỏ như của thằng google nó đề ra. Như vậy các bạn phải cấu hình cho CoulDNS để làm trung gian trỏ về.
Sau khi xác nhập tài khoản bạn đăng nhập vào https://asia.cloudns.net/ giao diện xuất hiện giống như thế này bạn chọn Add new.
Tiếp theo bạn chọn Master zone
Sau đó điền tên miền bạn muốn trỏ về (tên miền bạn thực hiện ở Bước 1) và bấm nút tạo
Bạn sẽ nhận được một vùng DNS mới với các bản ghi NS đã được thiết lập:
Giai đoạn 1: Bấm chọn CNAME
rồi ấn “Tạo mẫu tin mới” giao diện trông giống như thế này và điền Copy 1 vào phần Host, điền Copy 2vào phần Trỏ đến sau đó bấm Save.
Tiếp tục bấm “Tạo mẫu tin mới” giao diện cũng như vậy điền Copy 3 vào phần Host, điền Copy 4 vào phần Trỏ đến cuối cùng là bấm Save.
Giai đoạn 2: Bấm chọn A (Giống như Giai đoạn 1) thêm 4 bản ghi A với địa chỉ IP: 216.239.32.21 | 216.239.34.21 | 216.239.36.21 và 216.239.38.21 (Vào mục Trỏ đến còn mục Host để trống) lần lượt từng địa chỉ 1 nhé. Mình làm mẫu cái đầu tiên nhé 3 IP sau làm tương tự.
Sau khí thêm hết 4 địa chỉ IP rồi bạn bấm vào All để xem kết quả nhé có 2 loại CNAME, 4 loại A và 2 loại NS (Cái NS có tên miền thì 4 cái có tên miền 2 thì … Nên không phải xoắn nhé) của mình thì 2 loại NS.
Bước 3: Sau khi bạn trỏ tên miền xong ở Bước 2 bạn đăng nhập lại trang https://my.freenom.comvào My Domains
Để vào cấu hình quản lý tên miền tiếp theo bạn chọn Manage Domain
Sẽ tới một giao diện mới trên thanh Management Tools => Nameservers
Dẫn tới trình đơn nhập NS ở Giai đoạn 2 Sau đó bấm Change Nameservers để lưu thay đổi, vậyBước 3 đã xong.
Bước 4: Trở về Bước 1 và bấm Lưu (nếu bạn nào lỡ tay tắt nó đi thì hãy nhập lại như Bước 1 và bấm Lưu)
Đây làm kết quả nhé !@
Bước 5: Tạm gọi là bước Pro nghe cho nó vui tai. Ví nếu bạn dừng ở Bước 4 khi người dùng truy cập trực tiếp chỉ đánh miên miền. Ví dụ: http://quangmen01.tk/ vậy ông Google ông ta BÁO LỖI 404 vậy là bạn mất tiêu một lượng khách truy cập trực tiếp.
Sau đây là các khắc phục nhé. Ở tại đây bạn bấm vào Chỉnh sữa nhé.
Sau đó bấm dấu Check vào ô Chuyển hướng quangmen01.tk đến www.quangmen01.tk (của mình làquangmen01.tk của bạn là gì mình không biết =_=) sau đó bấm lưu là xong nhé.
Vậy quá trình trỏ tên miền tới đây kết thúc giờ bạn truy cập quangmen01.blogspot.com hayquangmen01.tk hay www.quangmen01.tk thì cũng đưa về 1 trang web thôi.
Kết luận
- Bạn trỏ tên miền miễn phí khác như .ml| .ga| … Cũng làm tương tự nhé. Cách này áp dụng trỏ các tên miền Pro khác như .com| .vn| .net| .org … Đều được hết nhé nhưng trực tiếp trên phần quản trị tên miền của nhà cung cấp không gián tiếp như thế này.
- Đến với .tk| .ml| .ga| … hoàn toàn miễn phí nhé!
- Trong thời điểm hiện nay VNPT và FPT mà đặt biệt là VNPT đã chặn thẳng không thương tiếc các web có lên miền .blgspot.com và .wordpress.com các tên miền miễn phí tk| .ml| .ga| là một giải pháp tuyệt vời khỏi lo bị chặn. (Mình muốn nhấn mạnh ở đây khi bạn đổi tên miền thì blog của bạn sẽ không bị chặn bởi các nhà mạng VNPT hay FPT nhưng hình ảnh vẫn bị chặn _ Đã có cách khắc phục rồi nhé các bạn cứ yên tâm)
- Cách khắc phục ảnh không hiện ra trên Blog cho các nhà mạng VNPT và FPT chặn.
Thứ Tư, 6 tháng 12, 2017
- tháng 12 06, 2017
- Nguyễn Văn Tiềm
- 1 comment
Slide chạy ảnh đẹp luôn là những điểm nhấn trên 1 Website, blog. Slide đó bạn có thể trình bày những thông tin nổi bật như bài viết, quảng cáo, hình ảnh đẹp...1 hiệu ứng Slide đẹp cũng góp phần làm tô điểm thêm cái đẹp và sống động của trang Web. Ở bài viết hôm nay mình giới thiệu tới các bạn Slideshow Jquery chạy ảnh.
Demo và hướng dẫn mình sử dụng trên nền Blogger, ở dạng Website các bạn làm tương tự, dán vị trí code là Javascript và HTML là OK. ^^
- Hướng dẫn thủ thuật:
1. Vào bảng điều khiển Blogger -> Bố cục (Layout) -> Thêm tiện ích (Add a Widget) -> HTML/Javascript
2. Dán Code dưới đây vào tiện ích vừa thêm:
Code
<style type="text/css">
.container1 {
width: 660px;padding: 0;margin: 0 auto;
}
.folio_block {
position: absolute;left: 50%; top: 50%;margin: -140px 0 0 -395px;}
.main_view {float: left;position: relative;}
/*--Window/Masking Styles--*/
.window {-moz-box-shadow: 0px 0px 5px #303030;
-webkit-box-shadow: 0px 0px 5px #303030;
box-shadow: 0px 0px 5px #303030;border:1px solid #000000;height:240px; width: 660px;
margin-top:15px;overflow: hidden; /*--Hides anything outside of the set width/height--*/
position: relative;
}
.image_reel {
position: absolute;top: 0; left: 0;
}
.image_reel img {float: left;}
.paging_btrix {
position: absolute;bottom: 10px; right: -7px;width: 178px; height:47px;z-index: 100; /*--Assures the paging stays on the top layer--*/text-align: center;
line-height: 40px;
background: url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk2BJ8AGM8C-JWjv6GkdVXJidZH_F-CV0Spssf4LmC-nQyhkjUiYqy8IVlaYfCj3lhfIdCz0bnE1SGSCP4fm9A3RRdekLMhXYoemvCGnCWMh407tsRmC0SRNZqSC-uFWoWGYGoknOnBOQ/s1600/paging_btrix_bg2.png) no-repeat;
display: none;
}
.paging_btrix a {
padding: 5px;text-decoration: none;color: #fff;
}
.paging_btrix a.active {
font-weight: bold; background: #920000; border: 1px solid #610000;
-moz-border-radius: 3px;
-khtml-border-radius: 3px;
-webkit-border-radius: 3px;
}
.paging_btrix a:hover {font-weight: bold;}
</style>
<!-- Huong dan thu thuat -->
<div class="container1">
<div class="main_view">
<div class="window">
<div class="image_reel">
<a href="http://mmocafe.com"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn48YITo3AqoL6RO3WCqWmfMdJ9MD4de4hlUQiNUn4BrxYT00benssrQ8wD_x4LfCA5hOavm5hsMTYdLm6t-q80Tv_eSr8hRPGAJcLag4RlhPAxCCwy_rTkPvnnwaaeywEHfJ06r4oio3v/s1600/anh-bia-fb-tinh-yeu-10.jpg" alt="tin tuc cong nghe" width='660' /></a>
<a href="http://mmocafe.com/kiem-tien-online/"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVV-6FpKPF3DcBeeXlJBZqCb2aPtUkLVnczCE751TpbuBQgY7I364WRIrkMS8GD5l6Y37mle9F_UYVozNSpq8AP34s6woQk8f7AtgY3k0DfzJmvH0S0b3L-_Xgy0KN_Td26hpqoy8UnR5A/s1600/anh-bia-fb-tinh-yeu-11.jpg" width='660' alt="kiem tien qua mang" width='660' /></a>
<a href="http://mmocafe.com/topic/iphone-8/"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_bplVm19PqAYBwDecmkjYqcyRqxIrD-cdn7ECEgIk0uhPhXZop8xZg2kIXB5QcjqEI6nL2cI4KVMjVNl_zyYUkTezV_0KqN3-VIIVXlrJNaXBQ6WmG1jQAVrCy9UO4EeGw1tZozDAYfi4/s1600/anh-bia-tinh-yeu-dep-3.jpg" alt="iphone 8" width='660' /></a>
<a href="http://cutiseo.blogspot.com"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgim-8dZBi4pmVvhDOFgq-vce70Iof5bcUFcnWaDrprqibFQrZNXg3ISX1N1mI7WtS_HRizvILumTu7quCXpR4cerywcPZHdchlO1AG4D1BsRpsYNPvx3XsTC7WDG1Evq3HGSjhMWDLq3zW/s1600/anh-bia-fb-tinh-yeu-1.jpg" alt="huong dan seo" width='660' /></a>
</div>
</div>
<div class="paging_btrix">
<a href="#" rel="1">1</a>
<a href="#" rel="2">2</a>
<a href="#" rel="3">3</a>
<a href="#" rel="4">4</a>
</div>
</div>
</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//Set Default State of each portfolio piece
$(".paging_btrix").show();
$(".paging_btrix a:first").addClass("active");
//Get size of images, how many there are, then determin the size of the image reel.
var imageWidth = $(".window").width();
var imageSum = $(".image_reel img").size();
var imageReelWidth = imageWidth * imageSum;
//Adjust the image reel to its new size
$(".image_reel").css({'width' : imageReelWidth});
//paging_btrix + Slider Function
rotate = function(){
var triggerID = $active.attr("rel") - 1; //Get number of times to slide
var image_reelPosition = triggerID * imageWidth; //Determines the distance the image reel needs to slide
$(".paging_btrix a").removeClass('active'); //Remove all active class
$active.addClass('active'); //Add active class (the $active is declared in the rotateSwitch function)
//Slider Animation
$(".image_reel").animate({
left: -image_reelPosition
}, 500 );
};
//Rotation + Timing Event
rotateSwitch = function(){
play = setInterval(function(){ //Set timer - this will repeat itself every 3 seconds
$active = $('.paging_btrix a.active').next();
if ( $active.length === 0) { //If paging_btrix reaches the end...
$active = $('.paging_btrix a:first'); //go back to first
}
rotate(); //Trigger the paging_btrix and slider function
}, 5000); //Timer speed in milliseconds (3 seconds)
};
rotateSwitch(); //Run function on launch
//On Hover
$(".image_reel a").hover(function() {
clearInterval(play); //Stop the rotation
}, function() {
rotateSwitch(); //Resume rotation
});
//On Click
$(".paging_btrix a").click(function() {
$active = $(this); //Activate the clicked paging_btrix
//Reset Timer
clearInterval(play); //Stop the rotation
rotate(); //Trigger rotation immediately
rotateSwitch(); // Resume rotation
return false; //Prevent browser jump to link anchor
});
});
</script>
Các điểm lưu ý mình đã in màu khác. Các bạn có thể chỉnh sửa theo ý của mình nhé.
- Lưu lại và xem kết quả :)
May you like: Tin Tuc Cong NgheChủ Nhật, 19 tháng 11, 2017
- tháng 11 19, 2017
- Nguyễn Văn Tiềm
- Kinh nghiệm lập trình, React, React Native
- 1 comment
Chào các bạn, để tiếp nối với phần 1 - React là gì và tại sao nó lại quan trọng? mình sẽ viết tiếp phần 2 về React Native.
GIỚI THIỆU
React Native hiểu đơn giản chính là React cùng với native component.
Được Facebook release ra vào năm 2015, React Native cho phép bạn tạo các ứng dụng di động chỉ với Javascript và React. React Native có kiến trúc thiết kế tương tự như React, cho phép bạn thiết kế, tái sử dụng các UI phong phú từ các component mặc định và các component đến từ đóng góp của người dùng.
React Native dù chỉ mới ra đời 2 năm, nhưng đã nhận được sự quan tâm không kém cạnh gì đàn anh React. Tại Github repo, React Native nhận được hơn 48k stars, cùng với 1316 contributors – thậm chí còn nhiều hơn React. Hiện nay, ở các diễn đàn công nghệ, conference, Mobile summit, Facebook group thì React Native luôn là chủ đề nóng bỏng được đưa ra thảo luận và dần trở thành một xu thế công nghệ.
VẤN ĐỀ & GIẢI PHÁP
Hiện nay theo sự phát triển của xã hội, nhu cầu tạo ra một ứng dụng mobiles và ứng dụng web đồng nhất và nhanh nhất ngày càng tăng. Tuy nhiên do rào cản nền tảng và mong muốn đó chưa được thực hiện.
Thời gian gần đây xuất hiện nhiều framework cho phép sử dụng các ngôn ngữ chạy trên web để phát triển ứng dụng mobile hay còn gọi là cross-platform development như PhoneGap, Ionic, Cordova,.. tuy nhiên ứng dụng tạo ra chỉ đạt đến mức hybrid-app, sử dụng các Webviews để hiển thị giao diện lên chứ không thực sự là native.
Việc sử dụng các ứng dụng hybrid làm giảm hiệu năng và không tối ưu trong việc xử lý.
Google cũng công bố cho mình một hướng tiếp cận khác, hoàn toàn bỏ đi native app mà sử dụng Progressive Web App (PWA), tuy hiệu năng khá tốt, nhưng vẫn không thể nào so sánh được với native app khi ứng dụng trở nên lớn hơn, mặt khác PWA được cho là khó giữ lại người dùng hơn là native app.
React Native cung cấp cho bạn một thứ hoàn toàn khác biệt, ứng dụng được tạo ra sẽ hoàn toàn native với hiệu năng cao, chứ không phải là “mobile web app”, “HTML5 app” hay “hybrid app”. Bạn có thể build một ứng dụng mobile mà khó có thể phân biệt được nó với các native app khác tạo hoàn toàn bằng Java hay Swift/Objective-C. React Native sử dụng các UI hoàn toàn giống với iOS hay Android app thông thường, điều đặc biệt là nó được xây dựng dễ dàng hơn thông qua Javascript và React.
TẠI SAO PHẢI SỬ DỤNG REACT NATIVE?
React Native trở nên phổ biến như vậy là vì nó ăn theo đàn anh React vốn đang làm mưa làm gió trong lĩnh vực CNTT?
Không!
React Native không có: Controllers, Derectives, Templates, Global Event Listener, Models, View-Models,.. Vậy tại sao lại chọn React Native mà không phải các framework khác?
Bởi vì React Native có Component.
React Native trở nên phổ biến như vậy là vì nó ăn theo đàn anh React vốn đang làm mưa làm gió trong lĩnh vực CNTT?
Không!
React Native không có: Controllers, Derectives, Templates, Global Event Listener, Models, View-Models,.. Vậy tại sao lại chọn React Native mà không phải các framework khác?
Bởi vì React Native có Component.
Component của React Native được kế thừa từ React, và nó đóng vai trò như hạt nhân thúc đẩy React và React Native phát triển, với khả năng tái sử dụng và quản lý giao diện, Component API được xem như là tương lai của thiết kế UI trên web và mobile.
- Thực sự native
- Learn once write anywhere
Bởi vì Facebook nhận ra rằng với mỗi nền tảng khác nhau sẽ có mỗi giao diện, cảm nhận, khả năng khác nhau nên React Native vẫn hướng đến phát triển những ứng dụng riêng biệt cho từng platform để đem lại trải nghiệm tốt nhất cho người dùng.
Ở cấu trúc bên dưới, Js code chạy ở một thread riêng biệt với UI thread, vì vậy dù app có chạy với logic phức tạp đến mức nào thì UI vẫn cực kì mượt và không bị block bởi Js worker thread.
Kết quả hiện ra trên máy ảo như sau:
Rất nhiều tính năng nổi bật của ES6 như:
- Thay vì sử dụng var để khi báo biến cục bộ, ES6 sử dụng const và let,
- Khai báo annonymous function bằng fat arrow (=>)
- Chia source code ra thành nhiều module và sử dụng cú pháp import/export để quản lý.
- Đăt giá trị mặc định cho tham số của hàm
- …
Một điều kì lạ trong file index.ios.js demo ở trên là phần <Text>Hello world!</Text>. Như đã giải thích ở bài trước, đó là cú pháp của JSX, một cú pháp dành cho việc nhúng tag-based XML vào Javascript để sử dụng. Mỗi tag như sẽ được chuyển đổi thành một lần gọi hàm để tạo các component/element.
d. React component.
Component như đã nói ở trên, chính là cốt lõi của React, React Native, và là tương lai của công nghệ. React Native cho phép chúng ta xây dựng các Native UI Component đại diện cho các block của UI, và nhận nhiệm vụ mapping từ Js components sang native UI và render ra màn hình
Cả giao diện màn hình của thiết bị được vẽ như thế nào, bao gồm cả StatusBar, NavigationBar đều được qui định bởi các React Component. Thứ tự của các components trong cấu trúc cây của JSX cũng là thứ tự khi vẽ lên màn hình.
Các React Component không thể tự thay đổi props của chính nó được, mà phải nhờ một component cha thiết lập thuộc tính cho nó, và giá trị đó sẽ cố định trong suốt vòng đời của component đó. Đối với các thuộc tính thường xuyên thay đổi hoặc muốn thay đổi trong nội tại component ta cần sử dụng một khái niệm khác, gọi là state.
Với State, ta có thể maintain trạng thái và các thuộc tính của nó ngay trong nội tại component. State cũng có thể truy cập trong nội tại của component, tuy nhiên không như props, các component cha có thể không truy cập được vào state của component con.
Về tổng quát, bạn nên khởi tạo state ngay trong constructor của component, sau đó sử dụng hàm this.setState(object newState) để gán trạng thái cho component bất cứ khi nào bạn muốn. Và lưu ý rằng không nên truy cập và thay đổi trực tiếp bất cứ thuộc tính nào của state bằng cách gọi this.state.foo = ‘bar’, mà phải thực hiện thông qua hàm this.setState(‘bar’).
g. Style
Với React Native, bạn không cần dùng thêm một ngôn ngữ nào (như CSS) để qui định style cho các component khi vẽ lên màn hình. Tất cả những thứ bạn cần là sử dụng Javascript để tạo ra các object chứa các giá trị cần cho style.
h. Networking
Nhiều mobile apps cần phải load tài nguyên từ remote URL. Bạn cần phải tạo các POST request đến các REST API, và tải dữ liệu về thông qua GET request. Hoặc đơn giản bạn chỉ cần fetch các dữ liệu tĩnh ở đâu đó trên Internet về (Vd: tải một hình ảnh tĩnh,..).
Networking trong React Native được tạo ra từ hai API chính: Fetch và XMLHttpRequest. Cả hai đều được thiết kế để tương thích với API của trình duyệt, vì vậy:
- Lập trình viên Web không cần phải học một cách mới để tạo các network requests.
- Các thư viện đều được xây dựng trên nền tảng của 2 API trên cho React Native.
Ví dụ: Tải một content từ trang web tĩnh: fetch('https://iceteaviet.blogspot.com/hcmus.json')
Fetch cũng có thể thêm các tham số optional để customize HTTP request của bạn. Bạn có thể định rõ ra các header khi gửi POST request.
Bạn có thể tham khảo rõ hơn các ví dụ về Fetch API và các custom libraries khác tại đây hoặc đây.
i. Tích hợp React Native vào một ứng dụng có sẵn.
React Native rất tốt nếu bạn bắt đầu tạo ứng dụng với nó ngay từ đầu. Tuy nhiên đối với các project lớn nó cũng cực kì tốt khi thêm một vài SingleView hoặc user flow vào một dự án native có sẵn chỉ với một vài bước.
Bạn có thể tham khảo thêm tại đây hoặc bài blog sau.
Chúc các bạn học tốt và đừng quên để lại bình luận bên dưới nhé.
React Native đi theo một mục đích là học một lần những cốt lõi của ReactJs, và sau đó áp dụng nó vào tất cả các project từ web app đến mobile app (Android, iOS) mà không cần học thêm một công nghệ khác nào – Learn once, write everywhere.
Với tư duy và nền tảng có được khi học React bạn có thể dễ dàng chuyển đổi giữa việc lập trình Web và lập trình ứng dụng mobile, đáp ứng công việc thực tế.
- Live reloading – Hot reloading
Điều này sẽ đẩy mạnh quá trình phát triển app và các máy tính yếu sẽ không còn gặp vấn đề build lại project nhiều lần, tốn thời gian chờ đợi và ảnh hưởng hiệu năng máy tính như khi lập trình Android/iOS bình thường.
- Dễ dàng kết hợp với native code (Java, Swift,..)
- Hiệu năng cao
Ở cấu trúc bên dưới, Js code chạy ở một thread riêng biệt với UI thread, vì vậy dù app có chạy với logic phức tạp đến mức nào thì UI vẫn cực kì mượt và không bị block bởi Js worker thread.
- Dễ học
React Native cũng là chủ đề nóng bỏng được thảo luận và đăng tải thường xuyên, số lượng câu hỏi, tutorial, blog về React Native cũng đang tăng với số lượng chóng mặt, vì vậy thật dễ dàng để học hay tìm ra câu trả lời cho vấn đề bạn đang mắc phải.
SỬ DỤNG NHƯ THẾ NÀO?
Với chủ đề là React và Swift, mình xin hướng dẫn các bạn một số vấn đề với React Native và iOS development.
Với chủ đề là React và Swift, mình xin hướng dẫn các bạn một số vấn đề với React Native và iOS development.
a. Getting started.
Để có thể sử dụng React Native cho iOS bạn cần phải có một máy tính cài đặt hệ điều hành MacOSX (có thể là máy ảo, hoặc máy Hackintosh).
Tiến hành cài đặt các dependencies cần thiết như NodeJS và Watchman sử dụng Homebrew bằng cách chạy các dòng lệnh sau:
$ brew install node
$ brew install watchman
$ brew install watchman
Tiếp theo, cài đặt React Native CLI (command line interface):
npm install -g react-native-cli
Cài đặt XCode thông qua Mac App Store. Nên cài Xcode phiên bản 8.0 hoặc cao hơn để đảm bảo tương thích với các tính năng mới của các bản release React Native gần đây.
Kiểm tra lại việc cài đặt bằng cách tạo và chạy thử một project:
react-native init AwesomeProject
cd AwesomeProject
react-native run-ios
cd AwesomeProject
react-native run-ios
Kết quả hiện ra trên máy ảo như sau:
Dòng lệnh chỉ là một cách để chạy ứng dụng của bạn. Ngoài ra bạn còn có thể chạy bằng cách nhấn trực tiếp phím Run trong Xcode hoặc trong Nuclide.
Thử thay đổi một vài giá trị trên giao diện bằng cách:
- Mở file index.ios.js (hoặc index.android.js cho Android) bằng text editor và thử sửa dòng "Welcome to React Native!" thành tên của bạn.
- Chọn trở lại máy ảo Simulator khi nãy và ấn tổ hợp phím Command⌘ + R để thực hiện Live reload và cập nhật thay đổi lên ứng dụng.
Vậy là bạn đã thành công trong việc tạo và chỉnh sửa một app React Native đầu tay cho mình rồi.
b. Javascript “mới”
Hãy cùng mở lại file index.ios.js khi nãy và xem kĩ lại:
Hãy cùng mở lại file index.ios.js khi nãy và xem kĩ lại:
Có gì đó kì lạ ở đây, một cái gì đó không thực sự giống như Javascript???
Đừng hoang mang, đây là tương lai!
Đầu tiên ES2015 (hay ECMAScript6, ES6) là một bộ cải thiện Javascript mà hiện nay đã trở thành chuẩn chung cho các lập trình viên. Nhiều tính năng của ES6 đã sẵn sàng cho các engine Js hiện đại. Bằng cách sử dụng Babel, chúng ta có thể đảm bảo các tính năng của ES6 có thể chạy trên nhiều nền tảng khác nhau (Android, iOS, Windows,...)
Rất nhiều tính năng nổi bật của ES6 như:
- Thay vì sử dụng var để khi báo biến cục bộ, ES6 sử dụng const và let,
- Khai báo annonymous function bằng fat arrow (=>)
- Chia source code ra thành nhiều module và sử dụng cú pháp import/export để quản lý.
- Đăt giá trị mặc định cho tham số của hàm
- …
Và quan trong hơn hết, ES6 bắt đầu có khái niệm JS classes. Trước đó “class” trong Js thực chất chỉ là các function với instance method được gán vào MyFunction.prototype.
ES6 cho phép ta sử dụng cú pháp đơn giản hơn với chỉ một từ khóa class. Class trong ES6 cho phép ta sử dụng các hàm có sẳn, viết thêm hàm, kế thừa và có cả constructor như class của các ngôn ngữ khác.
c. JSX
Một điều kì lạ trong file index.ios.js demo ở trên là phần <Text>Hello world!</Text>. Như đã giải thích ở bài trước, đó là cú pháp của JSX, một cú pháp dành cho việc nhúng tag-based XML vào Javascript để sử dụng. Mỗi tag như sẽ được chuyển đổi thành một lần gọi hàm để tạo các component/element.
JSX giúp cho việc thiết kế giao diện trở nên dễ dàng hơn, dễ đọc hiểu và tưởng tượng ra được mình đang thiết kế UI gì.
Bạn không bắt buộc phải sử dụng JSX, tuy nhiên cách áp dụng này không có khuyết điểm nào và thực sự nên dùng.
d. React component.
Component như đã nói ở trên, chính là cốt lõi của React, React Native, và là tương lai của công nghệ. React Native cho phép chúng ta xây dựng các Native UI Component đại diện cho các block của UI, và nhận nhiệm vụ mapping từ Js components sang native UI và render ra màn hình
Cả giao diện màn hình của thiết bị được vẽ như thế nào, bao gồm cả StatusBar, NavigationBar đều được qui định bởi các React Component. Thứ tự của các components trong cấu trúc cây của JSX cũng là thứ tự khi vẽ lên màn hình.
React Native hỗ trợ sẵn khá nhiều components tương ứng với các View cơ bản của iOS/Android. Danh sách có thể được xem tại đây.
Ngoài ra các React Component còn có thể tái sử dụng qua lại giữa Web và Mobile làm cho việc thống nhất hóa các trang web và ứng dụng của một công ty trở nên dễ dàng hơn bao giờ hết
e. Props
Nhiều component có thể được customize khi nó được tạo ra bằng nhiều thuộc tính khác nhau, những thuộc tính/tham số đó gọi là props.
Props có thể được hiểu như properties của một component, tất cả các component đều có thể có props dù đó là component cơ bản của React Native hay custom component do người dùng tạo ra. Props có thể được truy cập nội tại bên trong component, cho phép component đó biết nó phải hoạt động như thế nào, hiển thị thế nào lên màn hình.
Ví dụ với một component cơ bản của React Native là <Image>. Khi ta tạo một Image ta có thể sử dụng một props tên là “source” để kiểm soát cái gì sẽ được in ra màn hình.
Các React Component không thể tự thay đổi props của chính nó được, mà phải nhờ một component cha thiết lập thuộc tính cho nó, và giá trị đó sẽ cố định trong suốt vòng đời của component đó. Đối với các thuộc tính thường xuyên thay đổi hoặc muốn thay đổi trong nội tại component ta cần sử dụng một khái niệm khác, gọi là state.
e. State
Với State, ta có thể maintain trạng thái và các thuộc tính của nó ngay trong nội tại component. State cũng có thể truy cập trong nội tại của component, tuy nhiên không như props, các component cha có thể không truy cập được vào state của component con.
Về tổng quát, bạn nên khởi tạo state ngay trong constructor của component, sau đó sử dụng hàm this.setState(object newState) để gán trạng thái cho component bất cứ khi nào bạn muốn. Và lưu ý rằng không nên truy cập và thay đổi trực tiếp bất cứ thuộc tính nào của state bằng cách gọi this.state.foo = ‘bar’, mà phải thực hiện thông qua hàm this.setState(‘bar’).
Ví dụ ta muốn làm một máy phiên dịch từ ngữ thành pizza thì có thể sử dụng this.state để lưu và chỉnh sửa những từ đã gõ. Ở đây mỗi khi ta nhập gì đó vào <TextInput> thì hàm onChangeText() sẽ gọi hàm this.setState() để gán giá trị text mới vào this.state.text. Ngay sau đó khi component được render ra màn hình, ta sẽ lấy this.state.text đó ra split, mapping thành những ký hiệu 🍕 và vẽ ra màn hình trong hàm render().
g. Style
Với React Native, bạn không cần dùng thêm một ngôn ngữ nào (như CSS) để qui định style cho các component khi vẽ lên màn hình. Tất cả những thứ bạn cần là sử dụng Javascript để tạo ra các object chứa các giá trị cần cho style.
Tất cả các core component hỗ trợ bởi React Native đều chấp nhận một props tên là ‘style’.
Các style name và giá trị được kế thừa từ CSS ngoài trừ việc chuyển sang sử dụng CamelCase để biểu thị. (Ví dụ: backgroundColor thay vì background-color của CSS). Điều đó tạo thuận lợi cho việc rút ngắn khoảng cách giữa lập trình mobile apps và web apps.
Một props chứa các giá trị của style có thể là một POJO (Plain Old Javascript Object) chứa một mảng các style. Tuy nhiên vì các component có thể phức tạp hơn khi project phát triển, để clean code ta thường sử dụng StyleSheet.create() để define nhiều styles cùng lúcCác style name và giá trị được kế thừa từ CSS ngoài trừ việc chuyển sang sử dụng CamelCase để biểu thị. (Ví dụ: backgroundColor thay vì background-color của CSS). Điều đó tạo thuận lợi cho việc rút ngắn khoảng cách giữa lập trình mobile apps và web apps.
h. Networking
Nhiều mobile apps cần phải load tài nguyên từ remote URL. Bạn cần phải tạo các POST request đến các REST API, và tải dữ liệu về thông qua GET request. Hoặc đơn giản bạn chỉ cần fetch các dữ liệu tĩnh ở đâu đó trên Internet về (Vd: tải một hình ảnh tĩnh,..).
Networking trong React Native được tạo ra từ hai API chính: Fetch và XMLHttpRequest. Cả hai đều được thiết kế để tương thích với API của trình duyệt, vì vậy:
- Lập trình viên Web không cần phải học một cách mới để tạo các network requests.
- Các thư viện đều được xây dựng trên nền tảng của 2 API trên cho React Native.
- Fetch API:
Ví dụ: Tải một content từ trang web tĩnh: fetch('https://iceteaviet.blogspot.com/hcmus.json')
Fetch cũng có thể thêm các tham số optional để customize HTTP request của bạn. Bạn có thể định rõ ra các header khi gửi POST request.
Bạn có thể tham khảo rõ hơn các ví dụ về Fetch API và các custom libraries khác tại đây hoặc đây.
i. Tích hợp React Native vào một ứng dụng có sẵn.
React Native rất tốt nếu bạn bắt đầu tạo ứng dụng với nó ngay từ đầu. Tuy nhiên đối với các project lớn nó cũng cực kì tốt khi thêm một vài SingleView hoặc user flow vào một dự án native có sẵn chỉ với một vài bước.
- Hiểu rõ bạn cần intergrate component nào
- Tạo một Podfile với subspec cho tất cả React Native components mà bạn muốn sử dụng trong native app
- Tạo và chỉnh sửa các component đó bằng Javascript.
- Thêm một event handler mới để tạo RCTRootView trỏ tới React Native component của bạn với tên AppRegistry mà bạn đã khai báo trong index.ios.js
- Chạy React Native server bằng cách gõ lệnh npm start, và Run ứng dụng native của bạn từ XCode
- Debug
- Deploy ứng dụng của bạn qua script ‘react-native-xcode.sh’
- Thưởng thức thành quả
Ngoài ra bạn cũng có thể làm ngược lại - intergrate một component tạo ra bằng native code (Swift, Java) vào ứng dụng React Native bằng cách sử dụng:
Import YourAwesomeComponent from ‘./com/icetea/native/component/yourawesomecomponent.js’
Bạn có thể tham khảo thêm tại đây hoặc bài blog sau.
Chúc các bạn học tốt và đừng quên để lại bình luận bên dưới nhé.
Đăng ký:
Bài đăng (Atom)