Tích hợp ReactJs với Rails
React.js là 1 thư viện JavaScript dùng dể xây dựng giao diện người dùng tạo ra bởi Facebook. Props: là properties của một component, chúng ta có thể thay đổi props của component bằng cách truyền dữ liệu từ bên ngoài vào. Props có thể là 1 object, funtion, string, number..... State: biểu diễn ...
React.js là 1 thư viện JavaScript dùng dể xây dựng giao diện người dùng tạo ra bởi Facebook.
Props: là properties của một component, chúng ta có thể thay đổi props của component bằng cách truyền dữ liệu từ bên ngoài vào. Props có thể là 1 object, funtion, string, number.....
State: biểu diễn trạng thái của component, state là private chỉ có thể thay đổi bên trong bản thân của chính component đó. Chúng ta có thể change state bằng cách gọi this.setState()
Để hiểu về vòng đời của 1 component, chúng ta có thểm xem ảnh sau:
Thêm gem "react-rails" vào Gemfile
Sau đó chạy lệnh:
bundle install rails webpacker:install # OR rake webpacker:install nếu dùng Rails dưới 5.0 rails webpacker:install:react # OR rake webpacker:install:react rails generate react:install
Sau khi chạy xong:
- app/javascript/components/ Chứa các React components
- ReactRailsUJS setup in app/javascript/packs/application.js
- app/javascript/packs/server_rendering.js cho server-side rendering
<%= javascript_pack_tag 'application' %>
Tạo Component đầu tiên: Để tạo component, chúng ta chạy lệnh:
rails g react:component HelloWorld greeting:string Component sẽ được sinh ra ở thư mục mặc định là app/javascript/components/
Hoặc tạo component trong thư mục:
rails g react:component my_subdirectory/HelloWorld greeting:string
Render trong view:
<%= react_component("HelloWorld", { greeting: "Hello" }) %>
React-rails cung cấp pre-bundled React.js và UJS driver. rails g react:install Sau đó restart server Sau khi chạy xong"
- Thêm //= requires to application.js
- Tạo thư mục components/ for React components
- add server_rendering.js for server-side rendering
Bây giờ, chúng ta có thể tạo React components in .jsx
class Post extends React.Component { render() { return <h1>{this.props.title}</h1> } }
Render component trong views:
<%= react_component("Post", {title: "Hello World"}) %>