【发布时间】:2018-03-29 17:46:57
【问题描述】:
我看过类似的帖子,但找不到答案,就我而言,我正在尝试从<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>
...
【问题讨论】:
-
尝试签出this similar question。也许也尝试不将
addExpense()函数推送到状态。我怀疑这个问题是您最近试图解决的先前问题的一个分支,关于在路线之间传递道具。请参阅我对此的回答以获取更多信息。 -
感谢您的链接。我已经看到了这个解释,但有解决方案吗? “使用 sessionStorage 和/或 localStorage”。在这种情况下,我该如何实现?我是个新手。
-
对缺乏明确性表示歉意。该解决方案保留在 ReactJS / React Router 之前。不是适合您的用例的实现,但对于理解错误仍然有用。
标签: javascript reactjs react-router