当前位置: 首页 > 面试题库 >

当使用react-router-dom中的Link时,为什么在'History'上无法执行'pushState'?

关冠宇
2023-03-14
问题内容

我看过类似的帖子,但找不到答案,就我而言,我正试图通过以下方式采取行动<App />

  addExpense = (expense) => {
    console.log('Hello From AddExpenseForm');
  }

/create路线在那里我渲染<AddExpenseForm />组件

<Link to={{
  pathname: '/create',
  state: { addExpense: this.addExpense }
}}> Create Expense</Link>

链接已呈现,但是当我单击它时,控制台出现错误:

Uncaught DOMException: Failed to execute 'pushState' on 'History': function (expense) {
      console.log('Hello From addExpense');
    } could not be cloned

为什么会这样,这里的解决方法是什么?

我更新的代码:

Index.js中的路由:

const Routes = () => {
  return (
      <BrowserRouter>
        <Switch>
          <Route path="/" exact component={App} />
          <Route path="/create" exact component={AddExpenseForm}/>
          <Route path="/expense/:expenseId" name="routename" component={ExpenseDetails} />
          <Route component={NotFound} />
        </Switch>
      </BrowserRouter>
  )
}

App.js:

  addExpense = (expense = {}) => {
    console.log('Hello From AddExpenseForm');
  }

  goToNextPage = (addExpense) => {
    this.props.history.push({
      pathname: '/create',
      state: { addExpense: this.addExpense }
    });
  }

  render() {
    return (
      <div>
        <Header
        />
        <button onClick={this.goToNextPage}>Create</button>
        ...

问题答案:

首先 ,为您的addExpense函数添加一些默认值:

  addExpense = (expense = DEFAULT) => {
    console.log('Hello From addExpense');
  }

然后 使用Link

<Link to={`/ideas/${this.addExpense}`}>Create Expense​</Link>

尝试以下 方法更好的方法 ):

  goToNextPage = (addExpense) => {
    this.props.history.push({
      pathname: '/create',
      state: { addExpense: addExpense }
    });
  }

在next(create)组件中,使用传递的值,如下所示:

this.props.location.state.addExpense();


 类似资料:
  • 问题内容: 我有时看到人们在导出组件时将它们包装起来: 这是做什么用的,什么时候应该使用? 问题答案: 当您在应用程序中包含主页组件时,通常将其包装在这样的组件中: 这样,该组件便可以访问,因此可以使用重定向用户。 某些组件(通常是标头组件)出现在每个页面上,因此没有包装在中: 这意味着标题不能重定向用户。 要解决此问题,可以在导出时将标头组件包装在一个函数中: 这使组件可以访问,这意味着标题现在

  • 两者都有路由、链接等。什么时候使用其中一种?我真的很困惑在哪里使用每一个。服务器端?客户端? https://reacttraining.com/react-router/ 在一些例子中,你需要通过历史,在另一些例子中则不需要。要怎么做? vs 什么时候使用一个或另一个真的很混乱,任何帮助都值得赞赏。

  • 问题内容: 每当我尝试在React中使用FontAwesome微调器图标(带有)时,都会出现以下错误: 编辑: 问题已经出现了好几次了,并且代码本身真的没有什么特别的。我一直使用微调器作为加载图标,并且每当用内容替换微调器时都会发生错误。例: ) 问题答案: 我想我知道为什么会这样。看来这与FontAwesome 5用标签替换标签的方式有关。我相信这与React处理从DOM中删除元素的方式不兼容。

  • 我有一个大量使用WebView的JavaFX应用程序。我正在尝试向DOM中插入一个JavaScript代码可以使用的对象,并且我需要这些对象在加载新页面时可用。 但是,当我运行程序时,FirebugLite在DOM中显示了对象,但是函数没有执行。 根据Oracle的一些文档,这似乎是提供从JavaScript到Java的向上调用的适当方式。我也看到过一些StackOverflow的帖子解释了同样的

  • 问题内容: 两者都有路由,链接等。何时使用一个或另一个?我真的很困惑在哪里使用每个。服务器端?客户端? https://reacttraining.com/react-router/ 在某些示例中,您需要传递历史记录,而在其他示例中则不需要。该怎么办? 与 何时使用一个或另一个非常令人困惑,任何帮助都值得赞赏。 问题答案: react-router 包含 react-router-dom 和 re

  • 我已经尝试更新我的软件包,就像这个问题说的,但它没有工作。 唯一有效的方法是将更改为,但我不知道它们之间有什么区别,也不知道为什么要追加