【发布时间】:2019-03-14 05:00:51
【问题描述】:
我的问题是当我在 redux 存储中更改状态并基于此状态安装或卸载组件时。代码如下所示:
class Main extends Component {
render() {
const { dropdownState } = this.props;
return (
<div>
<SecondHeadBar />
<div className="main">
<Switch>
<Route exact path='/' component={withRouter(WebsiteIndex)}/>
<Route path='/track/:trackid' component={withRouter(MssTrack)}/>
<Route path='/album/:albumid' component={withRouter(Container.AlbumContainer)}/>
<Route path='/profile/:userName' component={withRouter(MssUser)}/>
<Route path='/upload/:albumid' component={withRouter(MssUploadTemplate)}/>
<Route path='/upload' component={withRouter(MssUploadTemplate)}/>
<Route path='/admin' component={withRouter(ControlCenter)}/>
<Route path='/kategorie' component={withRouter(Category)} exact/>
<Route path='/kategorie/:catName' component={withRouter(Folder)}/>
<Route path='/notFound' component={withRouter(NotFound)}/>
<Route path='/meine-eintraege' component={withRouter(Container.MyEntriesContainer)}/>
</Switch>
</div>
{dropdownState ? <DownloadDropdown /> : ''}
</div>
);
}
}
function mapStateToProps(state) {
return {
dropdownState: state.collection.dropdownState
};
}
function mapDispatchToProps(dispatch) {
return {
dispatch
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Main);
每当道具dropdownState 改变时。并且组件DownloadDropdown 被挂载,然后Main 组件中的所有内容都被重新渲染。于是内容一闪而过。
【问题讨论】:
-
你的问题到底是什么?
-
如果不清楚,请抱歉。每当道具 dropdownState 发生变化时。并且组件 DownloadDropdown 会在 render() 函数重新渲染的所有内容中安装。所以内容会闪烁,因为它正在从 API 异步加载
-
@ArnaudChrist 我稍微改变了这个问题。希望这能让它更清楚。
-
与其卸载并重新安装
DownloadDropdown,不如将dropdownState作为道具传递给它,然后让它决定何时需要重新渲染/调用服务器。 -
@JoeClay 我也有这个想法,但我不知道这是否是一个不好的做法,因为这样会一直安装 DownloadDropdown。