我正在关注将 ReactRouter 与 React-Spring 一起使用的教程。该教程已过时并被调用以导入和使用 useContext ,如下所示:
const { location } = useContext(__RouterContext);
它现在切换到:
const { location } = useLocation();
因为这是新标准。
当我尝试运行 localhost 时,我收到“错误:无效的钩子调用。只能在函数组件的主体内部调用钩子。这可能由于以下原因之一发生:...”
以下是一些堆栈帧;
resolveDispatcher C:/Users/12892/Documents/node_modules/react/cjs/react.development.js:1476
useContext C:/Users/12892/Documents/node_modules/react/cjs/react.development.js:1484
使用位置 C:/Users/12892/Documents/misc projects/WebDev/modules/hooks.js:29
应用 C:/Users/12892/Documents/misc projects/WebDev/transition_site/src/App.js:13 renderWithHooks
C:/Users/12892/Documents/misc projects/WebDev/transition_site/node_modules/react-dom/cjs/react-dom.development.js:14985
mountIndeterminateComponent C:/Users/12892/Documents/misc projects/WebDev/transition_site/node_modules/react-dom/cjs/react-dom.development.js:17811
下面是 App.js 的代码。我相信这是由于将我的代码切换为在 __RouterContext 上使用 useLocation 时发生的错误。
import React from 'react';
import { Switch, Route, useLocation } from 'react-router-dom';
import { useTransition, animated } from '@react-spring/web';
import PageOne from './components/PageOne';
import PageTwo from './components/PageTwo';
import PageThree from './components/PageOne';
import PageFour from './components/PageFour';
import Nav from './components/Navbar';
const App = () => {
const { location } = useLocation();
const transitions = useTransition(location, location => location.pathname, {
from: {opacity: 0, transform: "translate(100%, 0)"},
enter: {opacity: 1, transform: "translate(0%, 0)"},
leave: {opacity: 0, transform: "translate(-50%, 0)"}
});
return (
<>
<Nav />
<main className='container-fluid'>
{transitions.map(({ item, props, key }) => (
<animated.div key={key} style={props}>
<Switch>
<Route exact path="/" component={PageOne} />
<Route exact path="/two" component={PageTwo} />
<Route exact path="/three" component={PageThree} />
<Route exact path="/four" component={PageFour} />
</Switch>
</animated.div>
))}
</main>
</>
);
}
export default App;
索引.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';
import 'bootstrap/dist/css/bootstrap.min.css';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
reportWebVitals();