backbone.router和React状态

Dav*_*ing 8 javascript url-routing backbone.js reactjs

根据路径设置React Component状态的标准方法是什么?我有以下React/Backbone示例:

var myApp = React.createClass({
  render: function() {
    return (
      <div className={this.state}></div>
    );
  }
})

var App = Backbone.Router.extend({
  routes: {
    "": "home",
    "create": "create"
  }
});

var app = new App();
app.on('route', function(page) {
  // How do I set state on myApp??
})

React.renderComponent(<myApp />, document.body);
Backbone.history.start();
Run Code Online (Sandbox Code Playgroud)

我相信我需要能够myApp从外部设定状态,但是如何?我找不到任何关于此的例子.

或许我在这里想错了方向,有没有更好的方法与React一起组织路线?

krs*_*krs 12

我不知道一般的解决方案是什么,但我,有点简化,做的是

var App = Backbone.Router.extend({
  routes: {
    "": "home",
    "create": "create"
  }
});

var myComponent = false

function loadOrUpdateComponent(urlState) {
    if (!myComponent) {
        myComponent = <MyApp urlState={urlState}/>
        React.renderComponent(myComponent, document.body); 
    } else {
        myComponent.setProps({urlState:urlState})
    }
}


var app = new App();
app.on('route', function(page) {
  loadOrUpdateComponent(page)
})

Backbone.history.start();
Run Code Online (Sandbox Code Playgroud)

因此,您问题的实际答案是.setProps(newProps)在先前渲染的组件上使用.我在事件处理程序中加载组件,因为否则你会在renderComponent和setProps之间遇到竞争条件,这可能会导致坏事.

编辑:

我已经更新了我的路线处理,现在我就这么做了

router.on('list', function() {
    React.renderComponent(<Component data={someData} />, mountPoint)
})

router.on("details", function(id) {
    React.renderComponent(<Component data={someData} selected={id} />, mountPoint)

})

router.on("extra-details", function(id) {
    React.renderComponent(
        <Component data={someData} selected={id}>
            <SpecificExtraComponent />
        </Component>
        , mountPoint
    )
})
Run Code Online (Sandbox Code Playgroud)

  • `React.renderComponent`将更新现有组件(如果有),因此loadOrUpdateComponent函数可以简单地为`React.renderComponent(<MyApp urlState = {urlState />,document.body);`. (2认同)