【问题标题】:React component doesn't change state when react router remounts it当反应路由器重新安装它时,反应组件不会改变状态
【发布时间】:2019-01-18 08:44:57
【问题描述】:

我有渲染不同组件的反应路由器。它看起来像这样:

ReactDOM.render(
        <Provider store={store}>
                <Router>
                        <div>
                                <Route exact path="/" component={ListPage}/>
                                <Route path="/edit/:itemId" component={ItemPage}/>
                        </div>
                </Router>
        </Provider>,
        document.getElementById('root')
);

所以 - 当我打开编辑页面时 - 组件呈现并在安装时我正在获取该项目的数据。我将其设置为状态,因此组件呈现。

然后 - 我回到列表页面并打开另一个项目的编辑页面 - 当编辑页面再次挂载时 - 它的状态与以前相同。

为什么会这样?每次路由器挂载时,编辑页面不应该以默认状态重新开始吗?

(目前我正在通过重置componentDidMount() 上的状态来解决此问题,但它对我来说看起来很丑陋的解决方案。)

【问题讨论】:

    标签: reactjs react-router-dom


    【解决方案1】:

    这应该可以解决您的问题。

    ReactDOM.render(
          <Provider store={store}>
            <Router>
              <Switch>
                <Route exact path="/" component={ListPage}/>
                <Route path="/edit/:itemId" component={ItemPage}/>
              </Switch>
            </Router>
          </Provider>,
       document.getElementById('root')
    );
    

    【讨论】:

    • 你能详细说明你做了什么以及为什么这能解决问题吗?
    • @sigmus 如果你不使用 Switch 两个路由都会被渲染,这是因为路由 / 是完全匹配的,/edit/ 路由也以 / 开头,因此两条路由将被渲染。使用 Switch,无论哪个是第一个匹配的路由,都会被渲染。 reacttraining.com/react-router/web/api/Switch
    猜你喜欢
    • 2018-01-05
    • 1970-01-01
    • 2017-12-23
    • 2020-09-29
    • 2019-11-27
    • 2021-01-13
    • 1970-01-01
    • 2023-01-25
    • 2019-03-27
    相关资源
    最近更新 更多