React TypeError: location is undefined
React TypeError: location is undefined
我目前正在创建样板反应应用程序。我一直在关注 these 个教程,但我一直无法通过第一个教程。
我使用 create-react-app 创建了我的应用程序
当我尝试 运行 我的应用程序时,它可以编译,但我收到一条错误消息:
类型错误:位置未定义
此错误指向此代码中的 ReactDOM.render( 行
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
registerServiceWorker();
如果相关,这也是我的 app.js 文件
import React from 'react';
import { Route } from 'react-router-dom';
import { HomePage, LoginPage } from "./components/pages";
import { Grid } from 'react-flexbox-grid';
import 'react-flexbox-grid/dist/react-flexbox-grid.css';
const App = () => (
<Grid fluid>
<Route path='/' exact component={HomePage} />
<Route path='/login' exact component={LoginPage} />
</Grid>
)
export default App;
我也试过创建一个新的 React 应用程序。第一次,我弹出了应用程序,以便我可以添加 css 模块,然后当我再次尝试构建它时,我使用了自定义反应脚本。问题开始于我弹出应用程序时,但我确定这是否是问题所在,因为我确实重建了它并将 src 文件夹复制到新应用程序。
最后,here 是我遇到的错误的屏幕截图。
在过去的 2.5 天里,我一直被这个问题困扰着,所以非常感谢任何帮助。提前谢谢你。
更新:大家好。我是个白痴。 <Link>
组件使用 to
属性,这与 a
标签的 href
不同。那是我的问题。真的。好吧,你所有的时间都花光了 3 天。无论如何,谢谢你的帮助,我很感激你所做的一切。
编辑 - 决议解释(如@Vishah 的回答所述)
我在此处添加编辑,希望能帮助遇到此问题的任何人。
问题的根源是链接组件包含 "href" 属性而不是 "to" 属性。
- <Link href='/'>Home</Link>
+ <Link to='/'>Home</Link>
此外,值得注意的是 "href" 没有抛出属性错误,因为小写属性在 React ^16.2 中仍然有效 dom。
这是他的回购协议的提交:https://github.com/vishalmshah/MERNStackBoilerplate/commit/73fb3fe2e39ffa870fb91bd8b3592887886e3dbb
这不是问题的根源
我想我明白了。 BrowserRouter 使用 location 对象来跟踪您的位置、您的历史记录以及应用程序可能导航到的其他位置。
BrowserRouter 路由需要被赋予位置对象,它们可以用来比较它们的路径值。
您的路线已被 App 对象包裹,而没有向下传递位置对象。
尝试通过您的应用传递位置信息:
const App = ({ location }) => (
随后您可能需要访问路线中的位置:
<Route location={location} ...
这个例子是我从中获得信息的地方:
https://github.com/Remchi/bookworm-react/blob/master/src/App.js
我立即注意到的一件事是您导入组件的方式...
import { HomePage, LoginPage } from "./components/pages";
你不能这样做...相反:
import HomePage from './components/pages/HomePage';
import LoginPage from './components/pages/LoginPage';
另外,你不应该安装 react-router 而只是 react-router-dom...
这是App.js
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import HomePage from './HomePage';
import LoginPage from './LoginPage';
const App = () => (
<Switch>
<Route path="/" component={HomePage} exact={true} />
<Route path="/login" component={LoginPage} exact={true} />
</Switch>
);
export default App;
这里是 Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './components/App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'),
);
registerServiceWorker();
注意:我没有创建 pages 目录,我也在使用 Switch...(文档:https://reacttraining.com/react-router/web/api/Switch)
更新:大家好。我是个白痴。与 a 标签的 href 不同,该组件使用 to 属性。那是我的问题。真的。好吧,你所有的时间都花光了 3 天。无论如何,谢谢你的帮助,我很感激你所做的一切。
我目前正在创建样板反应应用程序。我一直在关注 these 个教程,但我一直无法通过第一个教程。
我使用 create-react-app 创建了我的应用程序
当我尝试 运行 我的应用程序时,它可以编译,但我收到一条错误消息: 类型错误:位置未定义
此错误指向此代码中的 ReactDOM.render( 行
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
registerServiceWorker();
如果相关,这也是我的 app.js 文件
import React from 'react';
import { Route } from 'react-router-dom';
import { HomePage, LoginPage } from "./components/pages";
import { Grid } from 'react-flexbox-grid';
import 'react-flexbox-grid/dist/react-flexbox-grid.css';
const App = () => (
<Grid fluid>
<Route path='/' exact component={HomePage} />
<Route path='/login' exact component={LoginPage} />
</Grid>
)
export default App;
我也试过创建一个新的 React 应用程序。第一次,我弹出了应用程序,以便我可以添加 css 模块,然后当我再次尝试构建它时,我使用了自定义反应脚本。问题开始于我弹出应用程序时,但我确定这是否是问题所在,因为我确实重建了它并将 src 文件夹复制到新应用程序。
最后,here 是我遇到的错误的屏幕截图。
在过去的 2.5 天里,我一直被这个问题困扰着,所以非常感谢任何帮助。提前谢谢你。
更新:大家好。我是个白痴。 <Link>
组件使用 to
属性,这与 a
标签的 href
不同。那是我的问题。真的。好吧,你所有的时间都花光了 3 天。无论如何,谢谢你的帮助,我很感激你所做的一切。
编辑 - 决议解释(如@Vishah 的回答所述)
我在此处添加编辑,希望能帮助遇到此问题的任何人。
问题的根源是链接组件包含 "href" 属性而不是 "to" 属性。
- <Link href='/'>Home</Link>
+ <Link to='/'>Home</Link>
此外,值得注意的是 "href" 没有抛出属性错误,因为小写属性在 React ^16.2 中仍然有效 dom。
这是他的回购协议的提交:https://github.com/vishalmshah/MERNStackBoilerplate/commit/73fb3fe2e39ffa870fb91bd8b3592887886e3dbb
这不是问题的根源
我想我明白了。 BrowserRouter 使用 location 对象来跟踪您的位置、您的历史记录以及应用程序可能导航到的其他位置。
BrowserRouter 路由需要被赋予位置对象,它们可以用来比较它们的路径值。
您的路线已被 App 对象包裹,而没有向下传递位置对象。
尝试通过您的应用传递位置信息:
const App = ({ location }) => (
随后您可能需要访问路线中的位置:
<Route location={location} ...
这个例子是我从中获得信息的地方: https://github.com/Remchi/bookworm-react/blob/master/src/App.js
我立即注意到的一件事是您导入组件的方式...
import { HomePage, LoginPage } from "./components/pages";
你不能这样做...相反:
import HomePage from './components/pages/HomePage';
import LoginPage from './components/pages/LoginPage';
另外,你不应该安装 react-router 而只是 react-router-dom...
这是App.js
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import HomePage from './HomePage';
import LoginPage from './LoginPage';
const App = () => (
<Switch>
<Route path="/" component={HomePage} exact={true} />
<Route path="/login" component={LoginPage} exact={true} />
</Switch>
);
export default App;
这里是 Index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './components/App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root'),
);
registerServiceWorker();
注意:我没有创建 pages 目录,我也在使用 Switch...(文档:https://reacttraining.com/react-router/web/api/Switch)
更新:大家好。我是个白痴。与 a 标签的 href 不同,该组件使用 to 属性。那是我的问题。真的。好吧,你所有的时间都花光了 3 天。无论如何,谢谢你的帮助,我很感激你所做的一切。