You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React应用使用<Prompt>组件出现「history仅支持单个prompt」警告的问题

问题原因及解决方法

问题根源

你在Route中使用render={Abc}的写法不符合React Router 5的规范。render属性要求传入一个返回React元素的函数,直接传递组件类Abc会导致组件被非标准实例化,进而在渲染周期中重复注册<Prompt>组件,触发"一个history同时只能有一个prompt"的警告。

修复方案

修改Route的render属性为函数形式,正确传递props并渲染组件:

class App extends React.Component {
  render() {
    return (
      <Router>
        <Switch>
          {/* 改为函数形式,传入props并渲染Abc组件 */}
          <Route path="/abc" render={(props) => <Abc {...props} />} />
        </Switch>     
      </Router>
    );
  }  
} 

另外,不建议用全局变量window.inputEditing控制Prompt,建议在组件内部维护状态,更符合React规范:

class Abc extends React.Component {
  state = {
    inputEditing: false
  }

  handleInputChange = () => {
    this.setState({ inputEditing: true });
  }

  render() {
    return (
      <>
        <Prompt 
          message={() => this.state.inputEditing ? "未保存的修改会丢失,确定要离开吗?" : true}
        />
        <input type='text' onChange={this.handleInputChange}/> 
      </>
    );
  }  
} 

补充说明

更新react-router-dom到5.3.4无效,是因为这不是版本问题,而是组件渲染方式的错误导致的。

内容的提问来源于stack exchange,提问作者diesel94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:27:23