如何防止反应路由器重新渲染以前渲染的页面?

时间:2017-02-14 06:59:44

标签: reactjs react-router

我认为我在使用路由器时遇到了一些问题。如何防止反应路由器重新渲染先前渲染的页面?

我有这样的路由器代码:

class App extends React.Component {
  render() {
    return (
        <div>
            <NavBar/>
            {this.props.children}
        </div>
    );
  }
}

ReactDOM.render(
    (
        <Router history={hashHistory}>
            <Route path="/" component={App}>
                <IndexRoute component={Gateway} />
                <Route path="home" component={Gateway} />
                <Route path="categories" component={Categories} />
            </Route>
        </Router>
    ), document.getElementById('my-app')
);

当我第一次访问该页面时,它会点击索引,Gateway组件被渲染。然后我点击“类别”链接,并且类别组件被渲染。然后,当我再次单击“home”链接时,组件Gateway重新呈现。它的状态得到了重置。这真是令人沮丧,因为我无法弄清楚其状态为何重置的原因。

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

如果您要保存任何状态,则应将其存储在某处,例如组件的状态(如果使用redux,则为redux状态)。

在react中,您可以在组件中定义函数shouldComponentUpdate(),以强制React不重新渲染您的DOM。但是在react-router的情况下,第一条路径的DOM被破坏(不仅仅是隐藏),因此应该重新渲染。