不变违规:您不应该在 <Router> 之外使用 withRouter() (使用最少的工作示例)

Posted

技术标签:

【中文标题】不变违规:您不应该在 <Router> 之外使用 withRouter() (使用最少的工作示例)【英文标题】:Invariant Violation: You should not use withRouter() outside a <Router> (with minimal working example) 【发布时间】:2021-08-09 00:11:46 【问题描述】:

为什么会出现这个错误?

Invariant Violation:你不应该在

之外使用 withRouter()

...我该如何解决?

我想我在某种程度上滥用了Router

import React, Component from "react"
import axios from "axios"
import  withRouter  from 'react-router-dom'

class LoginForm extends Component 
    constructor(props) 
        super(props)
    

handleSubmit = (event) => 
    this.props.history.push("/dashboard")


render()   
    return (
            <form onSubmit=this.handleSubmit>

                <input type="submit" />
            </form>
    )




export default withRouter( LoginForm )

index.js 只是:

ReactDOM.render(
        <LoginForm />,
        document.getElementById("root")
)

【问题讨论】:

【参考方案1】:

withRouter 是一个高阶组件,它将在渲染时将最近路由的match、当前locationhistory 道具传递给包装的组件。只是它将组件连接到路由器。 source

所以你的问题是withRouter 无法连接到最近的路由器,因为没有。您可以通过添加一个来修复它:

ReactDOM.render(
        <BrowserRouter>
            <LoginForm />
        </BrowserRouter>,
        document.getElementById("root")
)

【讨论】:

以上是关于不变违规:您不应该在 <Router> 之外使用 withRouter() (使用最少的工作示例)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Enzyme 测试 React 组件时出错:'不变违规:您不应在 <Router> 外使用 <Link>'

不变式失败:您不应该在 <Router> 之外使用 <Link>

错误:不变量失败:您不应该在 <Router> 之外使用 <Link> 进行反应

开玩笑 - 不变式失败:您不应该在 <Router> 之外使用 <Link>

React 测试库不变量失败:您不应该在 <Router> 之外使用 <Route>

未捕获的错误:不变违规:元素类型无效:对象