反应路由器VS条件渲染

Meo*_*eow 9 javascript reactjs react-router-v4

我对使用React Router和常规条件渲染方法之间的核心差异(特别是关于性能)感到困惑.我的意思是"常规条件渲染方法",例如:

我们可以在父组件中设置一个状态,并将其作为子组件的道具传递,我们有条件地更新这种状态取决于要求,并且子组件将重新渲染,因为不同的内容取决于它的道具.

我认为它可以实现与使用React路由器完全相同的目标,那么为什么我们仍然需要React路由器?使用反应路由器会带来更好的性能体验还是什么(假设我们不需要历史记录功能)?

Rya*_*ins 8

React Router本身使用条件渲染,完全可以用条件渲染替换它的功能.你不必使用它,据我所知,没有一般性的论据可以解释为什么它比你自己的条件渲染更有效.

使用React Router的原因是它允许您以声明方式表达路由.应用程序通常有许多逻辑视图或路由,您可以有条件地选择在代码中的给定时间显示哪些,但随着可能的视图数量的增加,这种逻辑会变得复杂,许多开发人员发现它更容易管理通过在声明性语法中表达它们来扩散视图,这是React Router服务的核心功能.

例如,请考虑使用条件呈现的以下示例(从反应路由器指南修改):

class BasicExample extends React.Component {
  constructor() {
    super();
    this.state = { currentView: "home" };
  }

  render() {
    const currentView = this.state.currentView;

    return (
      <div>
        <ul>
          <li onClick={() => this.setState({ currentView: "home" })}>Home</li>
          <li onClick={() => this.setState({ currentView: "about" })}>About</li>
          <li onClick={() => this.setState({ currentView: "topics" })}>
            Topics
          </li>
        </ul>

        {currentView === "home" && <Home />}
        {currentView === "about" && <About />}
        {currentView === "topics" && <Topics />}
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

使用路由器的经文:

const BasicExample = () => (
  <Router>
    <div>
      <ul>
        <li><Link to="/">Home</Link></li>
        <li><Link to="/about">About</Link></li>
        <li><Link to="/topics">Topics</Link></li>
      </ul>

      <hr/>

      <Route exact path="/" component={Home}/>
      <Route path="/about" component={About}/>
      <Route path="/topics" component={Topics}/>
    </div>
  </Router>
)
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您将内部状态引入组件,您需要将回调传递给任何想要更改当前视图的子项,没有明确的方法来处理层次路由,在这种情况下,您会收到意外的currentView值处理,可以说后一个例子更容易阅读.另一方面,第一个例子可以说是更明显的,使用React Router库更灵活一些.与任何事情一样,这是您需要在您尝试解决的问题的背景下进行评估的权衡.

此外,通常希望将某些内容与逻辑视图的概念集成在一起,例如,您可能希望更改浏览器URL,维护视图历史记录或通过状态容器管理当前逻辑视图,这些都是件React Router有助于实现的功能

  • 谢谢!实际上我们的应用程序没有很多组件(最多20个),我们可能根本不需要历史跟踪功能,我们认为我们的自定义路由器/状态管理将更容易添加新功能或按需求修改派对API,这就是为什么我有点犹豫采用React Router.不管怎样,谢谢! (2认同)
  • 是的,如果您的应用程序很简单或只是在逻辑路由方式中没有太多,那么选择不添加react-router的附加依赖项是完全合理的. (2认同)