【发布时间】:2021-09-20 23:54:33
【问题描述】:
我有一个功能,我希望它替换 Header 和 Footer 组件之间的组件。
我应该在哪里/如何将defaultRouter 函数与history.push 一起使用。我看到只有 URL 改变了。 Header 组件正在更新pageIndex。
我尝试将 defaultRouter 更改为 useCallback 函数,但根本没有用。
这些函数的顺序是什么? 应用.js
function App() {
const [searchResults, setSearchResults] = useState([]);
const [itemsAmount, setItemsAmount] = useState('');
const [pageIndex, setPageIndex] = useState();
const history = createBrowserHistory();
// let history = useHistory();
const defaultRouter = useMemo(() => {
console.log(pageIndex);
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
settingResults={setSearchResults}
itemsCartAmount={itemsAmount}
setPageIndex={setPageIndex}
/>
{defaultRouter}
<Footer />
<Router history={history}>
<Switch>
<Route exact path='/'>
<Home />
</Route>
<Route path='/search'>
<Search/>
</Route>
<Route path='/cart'>
<Cart />
</Route>
<Route component={PageNotFound} />;
</Switch>
</Router>
</div>
);
}
编辑
我刚刚从 Index.js 中删除了BrowserRouter,同样的问题。
Index.js
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
pageIndex上方的这种方式正在更新,但history.push不要切换组件。
【问题讨论】:
-
你能告诉 use 为什么你在你的应用程序中使用 2 个路由器吗?
-
嗨@kumarmo2,在我之前的问题中,我刚刚删除了
Index.js中的``。同样的问题。
标签: reactjs routes react-router react-router-dom history