React 2 在开关中相同类的组件,从 1 移动到另一个,不会再次渲染



所以这是我的开关:

<Switch>
<Redirect exact from={`${match.url}`} to={`${match.url}/faq`} />
<Route exact path={`${match.url}/faq`} component={FAQPage} />
<Route path={`${match.url}/troubleshooting`} component={FAQPage} />
<Redirect from={`${match.url}/*`} to={`${match.url}/faq`} />
</Switch>

我的FAQPage是一个具有列表的组件,该列表根据列表的类型显示来自REDUX的数据:

let listType = 'troubleshooting';
if (this.props.match.url.indexOf('faq') !== -1) {
listType = 'faq';
}

我有一个列表容器,其中包含将填充数据的 react-semantic-UI 列表。

我的问题是,如果我加载一个页面,我会取回数据并显示它,但是当我移动到另一个页面时。它不会重新呈现 listContainer,这意味着它不会获取数据,因此它将显示为空。 如果我强制重新加载,那么我的第二个页面将加载,但是当我移动到第一个页面时,我得到空数据。

如果我复制粘贴我的组件的代码,并创建另一个组件以放入交换机的第二个路由。像这样:

<Switch>
<Redirect exact from={`${match.url}`} to={`${match.url}/faq`} />
<Route exact path={`${match.url}/faq`} component={FAQPage} />
<Route path={`${match.url}/troubleshooting`} component={TroubleShootingPage} />
<Redirect from={`${match.url}/*`} to={`${match.url}/faq`} />
</Switch>

这将起作用,假设因为组件是不同的组件,所以它不会重用,所以它必须完全渲染。

我的问题是:是否可以强制我的FAQPage从SWITCH重新加载? 以便它始终显示正确的数据?(我可以只保留 2 个完全相同.js文件的代码,但我不想在代码中有这样的冗余。

我想帮忙。您的情况有点难以理解,您是否考虑在 codesandbox.io 上添加最少的示例

最新更新