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)示例总是很好的。