如何在React - Rails中添加或删除对象?

时间:2016-09-17 21:57:15

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

我有一个带有react-rails gem的Rails应用程序。

这是我的控制者:

class WebsitesController < ApplicationController
  def index
    @websites = Website.all
  end
end

这是我的观点:

<%= react_component('WebsiteList', websites: @websites) %>

这是我的React组件:

class WebsiteList extends React.Component {

  render () {
    return (
      <div className="container">
        <AddWebsite/>
        <WebsiteItem websites={this.props.websites}/>
      </div>
    );
  }
}

WebsiteList.propTypes = {
  websites: React.PropTypes.node
};

在WebsiteItem中,它只是映射数组并显示每个对象。

使用ajax添加Web站点组件以获取服务器上的数据:

class AddWebsite extends React.Component {
  constructor() {
    super();
    this.state = {
      formValue: "http://www."
    }
  }

  handleChange(e) {
    this.setState({formValue: e.target.value});
  }

  submitForm() {
    $.ajax({
      method: "POST",
      url: "/websites",
      data: { website: {name: "New Web", url: this.state.formValue} }
    })
      .done(function() {
        console.log("done")
      });
  }

  render() {
    return (
      <form>
        <input value={this.state.formValue} onChange={this.handleChange.bind(this)} name="url"/>
        <button type="button" onClick={this.submitForm.bind(this)} className="btn">Add Web</button>
      </form>
    );
  }
}

当有人添加(或删除)链接并且ajax成功时,我也想更新React组件。而不是this.props.websites&amp; propTypes - 我怎么能为州做?我是否需要从ajax获取它,或者我可以在erb中使用<%=react_component ... %>吗?

解决这个问题的最佳方法是什么?基本上创建单页应用程序?

1 个答案:

答案 0 :(得分:2)

好的,所以你真正想要的是在>>> def h(x): ... r = int(x, 16) % 2**14 ... return r if r < 2**13 else r - 2**14 ... >>> h('1FFE') 8190 >>> h('E002') -8190 组件中进行回调,该组件来自你持有app状态的AddWebsite。请注意,Dashboard是组件绑定的,这意味着您无法访问其他组件的状态。您可以将一个组件的状态作为属性传递给另一个组件,这就是我们将要使用的。

this.state

请注意,这只是众多可能的解决方案之一。