嵌套的React组件和路由

时间:2014-09-29 15:47:41

标签: javascript reactjs url-routing

外部组件(页面布局):

var Layout = React.createClass({
  render() {
    return (
      <div className="container">
        <header>
          <h1>{this.props.title}</h1>
        </header>
        <section>
          {this.props.children}
        </section>
      </div>
    );
  }
});

第一部分(第1页):

var PageOne = React.createClass({
  render() {
    return (
      <Layout title="Component One">
        <p>This is component one.</p>
      </Layout>
    );
  }
});

第二部分(第2页):

var PageTwo = React.createClass({
  render() {
    return (
      <Layout title="Component Two">
        <p>This is component two.</p>
      </Layout>
    );
  }
});

现在,如果我们根据用户所在的页面用户(使用HTML5历史记录API)动态地将这些组件呈现给document.body,那么这将如何影响性能(而不是只切换Page组件而不重新呈现外(布局)组件)?

var React = require('react');
var {Router} = require('director');

var render = (page) => { React.renderComponent(page(), document.body); };

var routes = {
    '/page-one': () => { render(require('./pages/PageOne')); },
    '/page-two': () => { render(require('./pages/PageTwo')); }
};

Router(routes).configure({html5history: true}).init();

P.S。:有意简化这些示例组件中的HTML标记。在StackOverflow.com示例中,可能存在诸如问题,标签,用户,徽章,AskQuestion等页面组件,这些组件都包含在布局组件中,布局组件本身包含页眉,页脚,导航,侧边栏。

1 个答案:

答案 0 :(得分:-2)

如果没有重新呈现,则无法执行此操作,因为这两个页面组件不相似。如果使用一些计算参数创建一个组件,则可以避免大量突变。

组件页面:

var Page = React.createClass({
  render() {
   return (
        var _component_title = "Component" + this.props.componentName  
        <Layout title={_component_title}>
            <p>This is {_component_title}</p>
        </Layout>
     );
   }
});

路由器:

var Page = require('./pages/Page')
var render = (page) => { React.renderComponent(Page({componentName: page}), document.body); };

var routes = {
   '/page-one': () => { render('One'); },
   '/page-two': () => { render('Two'); }
};

React将仅重新呈现具有组件名称的节点。

但是你不需要了解rerender,React这么快就做到了。