React TypeError: местоположение не определено

В настоящее время я работаю над созданием стандартного приложения для реагирования. Я следил за этими руководствами, но не смог пройти мимо первый учебник.

Я создал свое приложение с помощью create-react-app

Когда я пытаюсь запустить приложение, оно компилируется, но я получаю сообщение об ошибке: TypeError: location is undefined

Эта ошибка указывает на 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;

Я также пробовал создать новое приложение для реагирования. Впервые я извлек приложение, чтобы добавить модули css, а затем, когда я попытался создать его снова, я использовал собственные сценарии реагирования. Проблема началась, когда я извлек приложение, но я уверен, что это была проблема, потому что я перестроил его и скопировал папку src в новое приложение.

Наконец, здесь - это снимок экрана с ошибками, которые я получаю.

Я застрял в этой проблеме в течение последних 2,5 дней, поэтому будет очень признателен за любую помощь. Огромное спасибо заранее.

ОБНОВЛЕНИЕ: Привет, ребята. Я идиот. Компонент <Link> использует атрибут to в отличие от href тега a. Это была моя проблема. Действительно. Что ж, уходит 3 дня насмарку и все ваше время. В любом случае спасибо за вашу помощь, я ценю все, что вы сделали.


person Vishah    schedule 18.02.2018    source источник
comment
Я почти уверен, что вы получаете ошибку, потому что средство визуализации не может найти корневой элемент dom для подключения. У вас есть ‹div id = root /› в html-файле, из которого вы получаете исходный код js?   -  person Gerik    schedule 19.02.2018
comment
У меня уже есть ‹div id = root› ‹/div› в html файле. Есть ли что-нибудь еще, что могло бы остановить его работу?   -  person Vishah    schedule 19.02.2018
comment
Где location используется в приложении? Какие location переменные, реквизиты и т. Д.?   -  person Brett DeWoody    schedule 19.02.2018
comment
Я уже просмотрел все, что написал. Не думаю, что я где-либо использовал слово «местоположение».   -  person Vishah    schedule 19.02.2018
comment
Вы установили пакет react-router?   -  person Henrik Andersson    schedule 19.02.2018
comment
Местоположение является частью API маршрутизации React 16: reacttraining.com/react-router/web / api / Route Извините, у меня пока нет ответа, но я ищу его.   -  person Gerik    schedule 19.02.2018
comment
Кстати, ссылка на учебник по YouTube содержит ошибки: hhttps // www.   -  person Gerik    schedule 19.02.2018
comment
Да, у меня установлен react router. Я также загляну в API. И я исправил ссылку. Большое вам спасибо за вашу помощь. Я очень ценю это.   -  person Vishah    schedule 19.02.2018


Ответы (3)


ОБНОВЛЕНИЕ: Привет, ребята. Я идиот. Компонент использует атрибут to, в отличие от href тега. Это была моя проблема. Действительно. Что ж, уходит 3 дня насмарку и все ваше время. В любом случае спасибо за вашу помощь, я ценю все, что вы сделали.

person Vishah    schedule 19.02.2018
comment
LOL ... Значит, проблема не в коде, который вы опубликовали ... Да, это Ссылка на ... - person SakoBu; 20.02.2018
comment
Ага. Я чувствую себя действительно глупо. Я просто рад, что починил. - person Vishah; 20.02.2018
comment
Что ж, поздравляю с решением вашей проблемы. :) Никаких проблем по поводу потраченного времени. Так мы учимся и становимся лучше. Мы будем знать лучше в следующий раз. - person Gerik; 20.02.2018

РЕДАКТИРОВАТЬ - Объяснение решения (как описано в ответе @Vishah)

Я добавляю здесь правку в надежде помочь всем, кто сталкивается с этим.

Источником проблемы было то, что компоненты Links включали атрибуты «href» вместо атрибутов «to».

-        <Link href='/'>Home</Link>
+        <Link to='/'>Home</Link>

Кроме того, стоит отметить, что «href» не выдает ошибку атрибута, потому что атрибуты в нижнем регистре все еще действительны dom в React ^ 16.2.

Вот фиксация его репо: https://github.com/vishalmshah/MERNStackBoilerplate/commit/73fb3fe2e39ffa870fb91bd8b3592887886e3dbb


Не в этом проблема

Думаю, я вижу проблему. BrowserRouter использует объект местоположения, чтобы отслеживать, где вы находитесь, вашу историю и, возможно, другие местоположения, к которым приложение будет перемещаться.

Маршрутам BrowserRouter требуется предоставить объект местоположения, который они могут использовать для сравнения своего значения пути.

Ваш маршрут обернут объектом вашего приложения без передачи объекта местоположения.

Попробуйте передать местоположение через свое приложение:

const App = ({ location }) => (

Впоследствии вам, возможно, придется получить доступ к местоположению в Маршрутах:

<Route location={location} ...

В этом примере я получил информацию от: https://github.com/Remchi/bookworm-react/blob/master/src/App.js

person Gerik    schedule 18.02.2018
comment
Я просто добавил это в свой код, но это не сработало. Я предполагаю, что вы имели в виду передачу местоположения, делая это: const App = ({ location }) => ( <div> <Route location={location} path='/' exact component={HomePage} /> <Route location={location} path='/login' exact component={LoginPage} /> </div> ) Это то, что вы имели в виду, или я должен сделать что-то еще. Кроме того, этот код выглядел в конце первого руководства. . Там нет места. - person Vishah; 19.02.2018
comment
Попался. Да, это было моим намерением. Не могли бы вы предоставить мне версию приложения, с которой вы работаете? Я не могу закончить это сейчас, но посмотрю позже и посмотрю, не смогу ли я это понять. - person Gerik; 19.02.2018
comment
Вот ссылка на мое репозиторий на github. Я только что создал один. В любом случае, большое спасибо за то, что помогли мне. Я очень ценю это. - person Vishah; 19.02.2018

Я сразу же замечаю, как вы импортируете компоненты ...

import { HomePage, LoginPage } from "./components/pages";

Вы не можете этого сделать ... Вместо этого:

import HomePage from './components/pages/HomePage';
import LoginPage from './components/pages/LoginPage';

Кроме того, вы не должны устанавливать response-router, а просто response-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();

Примечание: я не создавал каталог страниц, а также использую Switch ... (документы: https://reacttraining.com/react-router/web/api/Switch)

person SakoBu    schedule 19.02.2018
comment
Я могу использовать import {blah, blah}, потому что у меня есть файл index.js, который экспортирует каждый компонент в каждый каталог. Я также в настоящее время слежу за учебником, но моей предпочтительной структурой для моих компонентов был бы макет, контейнер и каталог презентаций, поэтому я могу организовать свою работу. Я планирую изменить это позже. Я не понимал, что мне не нужен response-router, поэтому спасибо, что дали мне знать. Я люблю делать вещи легкими и простыми. Наконец, я изменил div на Switch, но, к сожалению, это не сработало. В любом случае, я просто разместил свой код на Github, спасибо за вашу помощь. - person Vishah; 19.02.2018
comment
Можете выложить ссылку на репо? - person SakoBu; 19.02.2018
comment
Ой, извини. Вот ссылка. Забыл добавить. - person Vishah; 19.02.2018