Javascript 重定向到同一组件重新渲染
我正在使用相同的Javascript 重定向到同一组件重新渲染,javascript,reactjs,react-redux,react-router,Javascript,Reactjs,React Redux,React Router,我正在使用相同的表单组件编辑帖子并在应用程序中添加新帖子。表单的组件didmount如下所示: componentDidMount() { this.props.match ? this.props.dispa({ type: 'ON_LOAD_ACTION', payload: this.props.fetch.data.find(x => x.id == this.props.match.params.id) }) : this.prop
表单
组件编辑帖子并在应用程序中添加新帖子。表单的组件didmount如下所示:
componentDidMount() {
this.props.match ? this.props.dispa({
type: 'ON_LOAD_ACTION',
payload: this.props.fetch.data.find(x => x.id == this.props.match.params.id)
}) : this.props.dispa({
type: 'ON_RESET',
payload: ''
});
}
它检查URL上是否有id
,例如localhost:3000/edit/id
我正在更新一篇帖子。我提取了这篇文章的数据,我可以用它来填写表格。如果URL上没有id
,我只会将表单呈现为空。第二个分派用于将状态重置为初始状态
我使用的是react router
/redux
,我的问题是当我在编辑表单上并单击创建表单时。它不会重新渲染,而且我得到了我所在帖子的价值。我想这是因为我正在转向同一个表单
但是如果我点击submit
按钮来更新帖子,或者我首先进入/home
,组件会重新完美呈现 有不同的方法来看待问题:
React路由器不会在每次路由更改时从产品中卸载。这导致了您描述的行为,您总是看到相同的组件。您可以尝试使用内联函数强制重新渲染
由于不再调用您的componentDidMount
,您可以在FromProduct
组件上使用componentWillReceiveProps
。这样,对于每个路由更改,即使它已安装,也将执行它,因为它现在将接收新的道具
解决方案#1并非真正推荐。解决方案#2将执行以下操作:
组件将接收道具(新道具){
//componentDidMount的逻辑非常相似
//但是使用新的道具而不是这个
}
如果您仍然想尝试解决方案#1,请查看React router关于内联渲染的文档。查看此答案:问题可能是由于组件已装入,因此不会再次调用componentDidMount
,请尝试在componentDidUpdate
方法中添加此检查。嘿,我已经试过了result@FaroukYD对于这样的复杂场景,提供一个沙盒(例如codesandbox)示例总是很好的。