Rails 측 데이터의 샘플을 React Component로 재현
이쪽 기사야. 계속해.
react-rails 및 web packer를 사용하여 Rails 응용 프로그램에서 React 실행
전제 조건
환경 확인
rails new 응용 프로그램에 다음 Gem을 설치했습니다
react-rails
실현될 때까지 대략적인 절차
크게 두 단계로 나뉘어 제작한다.
절차.
1. Rails의 Controller 데이터를 JSON으로 반환하는 API 만들기
API용 Controller 만들기
일반적인 Controller와 namespace를 분리하여 API용 Controller를 만듭니다.
--no-assets --no-helper
옵션에 남아 있는 assets와 helper의 생성을 억제하면서 제작합니다.$ rails g controller api/v1/welcomes --no-assets --no-helper
Controller 작업 정의
JSON이 반환해야 할 샘플 데이터를 산열로 정의합니다.
app/controllers/api/v1/welcomes_controller.rb
class Api::V1::WelcomesController < ApplicationController
def index
@data = { greeting: "HelloFromAPI" }
end
end
뷰 생성하기
jbuilder 정의를 사용하여 JSON의 view를 반환합니다.
app/api/v1/welcomes/index.json.jbuilder
json.extract! @data, :greeting
창설
API의 route에 추가로 액세스합니다.
namespace :api, format: 'json' do
namespace :v1 do
resources :welcomes
end
end
JSON의 반환 확인
방문http://localhost:3000/api/v1/welcomes, 아래 데이터를 표시하면 됩니다.
{"greeting":"HelloFromAPI"}
2. React의 Component를 통해 API 응답 표시
표시할 React의 Component 지정
JSON이 반환할 수 있는 데이터는 React의 Component를 통해 표시됩니다.
다음과 같이 props를 통해 표시할 Component와 JSON 데이터를 호출하는 API의 URL을 지정합니다.
app/views/welcomes/index.html.erb
<%= react_component("HelloWorld", url: "/api/v1/welcomes") %>
React의 Component 편집
참조React의 공식 문서: React의 Component를 다음과 같이 수정합니다.대체로 다음과 같은 처리가 추가되었다.
constructor
에서 statecomponentDidMount()
에서 aax 호출this.props.url
에서 지정한 API를 통해staterender()
에 state 내용 보이기import React from "react"
import PropTypes from "prop-types"
class HelloWorld extends React.Component {
constructor(props) {
super(props);
this.state = {
error: null,
greeting: ''
};
}
componentDidMount() {
fetch(this.props.url)
.then(res => res.json())
.then(
(result) => {
this.setState({
greeting: result.greeting
});
},
// Note: it's important to handle errors here
// instead of a catch() block so that we don't swallow
// exceptions from actual bugs in components.
(error) => {
this.setState({
error
});
}
)
}
render () {
const { error, greeting } = this.state;
return (
<React.Fragment>
Greeting: {greeting}
</React.Fragment>
);
}
}
HelloWorld.propTypes = {
greeting: PropTypes.string
};
export default HelloWorld
또한, React에서 aax를 사용할 때componentDidMount
에 호출하고 setState
에서Component를 업데이트해야 한다.이하 인용React의 공식 문서의 문장.Where in the component lifecycle should I make an AJAX call?
You should populate data with AJAX calls in the componentDidMount lifecycle method. This is so you can use setState to update your component when the data is retrieved.
화면 표시 확인
실행
bin/webpack-dev-server
과rails s
의 상태에서 방문http://localhost:3000하여 아래 화면을 표시하면 된다.끝맺다
이번에는 aax를 사용하여 React의 Component에서 Rails Controller 방면의 데이터를 처리하는 방법을 소개했다.Rails의 API에 대한 사용법과 jbuilder도 접할 수 있어서 정말 다행입니다.
참조 링크
Reference
이 문제에 관하여(Rails 측 데이터의 샘플을 React Component로 재현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gotchane/items/1e33edd778ade719c7fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)