【发布时间】:2021-09-20 21:11:41
【问题描述】:
我的父组件中有App.js 一个Header 和一个Footer。
我想通过单击它们两个内部的按钮在Header 和Footer 之间切换组件。
每次pageIndex 更改时,我都想替换为其他组件。
我收到此错误Cannot read property 'push' of undefined
为什么我会收到此错误并且是干净且适当的乳清(使用我的defaultRouter() 和useMemo)?
function App() {
const [pageIndex, setPageIndex] = useState();
const [searchResults, setSearchResults] = useState([]);
const history = useHistory();
useEffect(() => {
console.log(pageIndex, 'App');
}, [pageIndex]);
const defaultRouter = useMemo(() => {
// Or - `const DefaultRouter = useMemo(() =>` instead of `useEffect()`
switch (pageIndex) {
case 1:
history.push({ pathname: '/search', state: searchResults });
break;
case 2:
history.push('/cart');
break;
default:
history.push('/');
break;
}
}, [pageIndex]);
return (
<div className='App'>
<Header/>
<Home />
{defaultRouter};
<Footer />
<BrowserRouter>
<Route path='/'>
<Home />
</Route>
<Route path='/search'>
<Search
searchResults={searchResults}
setItemsAmount={setItemsAmount}
/>
</Route>
<Route path='/cart'>
<Cart />
</Route>
<Route component={PageNotFound} />
</BrowserRouter>
;
</div>
);
}
编辑
正如 Shyam 在下面的回答中建议的那样,我将 App.js 更改为 useCallback 但 useCallback 不起作用。
const defaultRouter = useCallback(() => {
console.log(pageIndex, 'callBack');
switch (pageIndex) {
case 1:
history.push({ pathname: '/search', state: searchResults });
break;
case 2:
history.push('/cart');
break;
default:
history.push('/');
break;
}
}, [pageIndex]);
谢谢
【问题讨论】:
标签: reactjs routes react-router react-router-dom browser-history