【问题标题】:access data from a rails service in react front end react-on-rails从 react 前端 react-on-rails 中的 rails 服务访问数据
【发布时间】:2019-03-20 20:58:05
【问题描述】:

React on Rails 应用程序非常新,尤其是 React 部分。我正在尝试访问从 Rails 服务中的 SQL 查询给出的嵌套哈希中的数据。首先,这可能吗?

在 Rails 控制台中,假设 user1 已经被 id 找到,LedgersService.transactions(user1).first 以这种格式返回所有数据:

{:transactable=>{:type=>"存款", :id=>"28cba04f-5b9d-4c9c-afca-b09a6e0e8739", :user_id=>"72700244-e6b0-4baf-a381-c22bfe56b022", :transacted_at=>"2019-03-12 19:04:48.715678", :amount_cents=>15, :notes=>"none", :processor=>nil, :details=>nil}, :ledgers=>[{:entry_type=>"credit", :amount_cents=>15, :transacted_at=>"2019-03-12 19:04:48.715678", :user_id=>"72700244-e6b0-4baf-a381-c22bfe56b022", :transactable_type=>"存款", :transactable_id=>"28cba04f-5b9d-4c9c-afca-b09a6e0e8739"}]}

我试图在我的 React 组件中做类似的事情来尝试获取数据,但是,我不太确定如何设置 LedgersService.transactions 部分。这就是我目前拥有的方式:

class LedgersIndex extends React.Component {
  constructor(props) {
    super(props);
    this.state = { ledgers_service: { transactions: [] }, paginator: { count: 0, page: 0, limit: 0 }, user: { id: this.props.match.params.user_id } };

我的端点调用:

componentDidMount() {
    var user_id = this.state.user.id;
    this.fetchData(user_id, 1);
  }

  fetchData = (user_id, page_number) => {
    apiService.ledgersIndex(user_id, page_number)
      .then(
        paginated => {
          this.setState({
            ledgers_service: { 
              transactions: paginated.ledgers_service.transactions
            },
            paginator: {
              limit: paginated.meta.limit,
              count: paginated.meta.count,
              page: paginated.meta.page -1
            }
          });
        },

在我的渲染中进一步向下:

render() {
    const { classes } = this.props;
    const { ledgers_service, paginator } = this.state;

我在 apiService 中的获取:

function locationsIndex(page_number) {
  const requestOptions = {
    method: 'GET',
    headers: Object.assign({},
      authorizationHeader(),
      {  'Content-Type': 'application/json' })
  };

  return fetch(`${process.env.API_SERVER}/api/v1/admin/locations?page=${page_number}`, requestOptions)
    .then(handleResponse)
    .then(paginated => {
      return paginated;
    });
}

当我 console.log(ledgers_service.transactions(this.state.user.id)) 时,我得到了 ledgers_service.transactions 不是函数的错误。 console.log(paginator.count) 但是有效,这是因为事务被设置为数组吗?

在我从 Rails 控制台获取的 React 组件中获取相同端点的正确方法是什么?

【问题讨论】:

    标签: ruby-on-rails reactjs react-on-rails


    【解决方案1】:

    React on Rails 应用程序非常新,尤其是 React 部分。我是 试图访问从 SQL 查询给出的嵌套散列中的数据 在 Rails 服务中。

    是的,JS 喜欢 JSON,所以你应该有一个使用 JSON 响应的 Rails 动作。这是在 React 和 Rails 之间交换数据的正确方法:

    # in your React app
    fetch('/path/to/resource.json')
    .then((returnedResource) => {
          // do something with JSON
     })
    .catch(error => console.error('Error:', error));
    
    # in your controller
    respond_to do |format|
         format.json { render json: LedgersService.transactions(user1).first }
    end
    

    从那里,您可以将您的 returnedResource 视为 JSON 对象。在您的情况下,这将是 pagination

    【讨论】:

    • 这是控制器当前的状态,在我的 User 类中: ** def transactions t = LedgersService.transactions(@user) json_response(t) end ** 最后的第一个仍然会渲染所有1 比 1 的回答?
    • 我在底部的原始问题中更新了我的获取。我想要返回的主要不是来自 LedgersService 的数据,在 React 中究竟如何访问?我已经尝试了上面包含的内容,在 this.state 中设置了 ledgers_service: [],然后我还尝试了状态中的 transactions: [],所有返回为空
    • 我不明白你的最后一个问题。不要试图在这些 cmets 中放入太多代码,因为它们很难阅读。在包含更多相关详细信息时编辑您的帖子。如果你想一一展示,有数百种方法可以做到这一点,我不可能一一列举。如果您可以从 Rails 以 JSON 格式获取数据,那么该线程已死,我已成功回答您的原始问题。如果您需要进一步的帮助,请将此对话移至与我聊天或 reddit.com/r/learnprogramming/new 之类的地方。我会找你的帖子。
    猜你喜欢
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2019-08-12
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多