'history', глобальные ограничения без ограничений и window.history - PullRequest
2 голосов
/ 22 июня 2019

Так что у меня возникла проблема с React, когда, если бы я попытался использовать «историю», мой код не запустился бы, сообщая, что это «неожиданное использование history без ограничений по всему миру».

Я обратился к StackOverflow, чтобы получить помощь, и, что удивительно, мне удалось найти ответ на вопрос, с которым я имел дело.

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

Используя приставку, я вызвал метод через mapDispatchToProps.Мне нужно было добавить «историю» как одну из переданных переменных, чтобы я мог перенаправить пользователя обратно на предыдущую страницу, на которой он находился.

Первоначально я пытался использовать только «историю» в качестве переменной, но получал ошибку «без ограничений по всему миру» при попытке компиляции, поэтому я обратился к StackOverflow.Это когда они предложили мне попробовать использовать 'window.history'.Сначала я был настроен скептически, потому что не думал, что что-то простое решит мою проблему, но вот, оно успешно скомпилировано.

props.addExperience(data, history);

против

props.addExperience(data, window.history);

. Window.history работает.Может кто-нибудь объяснить, почему работает window.history, но история сама по себе не работает?

что такое «история»?Что делает «окно», которое решает проблему?

edit: this - это оригинальная запись StackOverflow, которую я нашел.Хотя Чейзен Беттингер смог решить проблему, он так и не объяснил почему окно.бы решить проблему.Если кто-то здесь может это сделать, это было бы здорово.

1 Ответ

1 голос
/ 22 июня 2019

Проблема, которую пытается решить правило linting, заключается в том, что неявная ссылка на свойства глобального объекта является простым источником ошибок .Например:

var status = false;
if (status) {
  console.log('status is actually truthy!');
}

Здесь status на верхнем уровне фактически относится к window.status, который всегда должен быть строкой;присвоение ему false приводит к превращению false в 'false'.

Если бы status было ограниченным глобальным с этим правилом, вы сможете использовать status только на верхнем уровне, еслиВы явно ссылались на window.status.Таким образом, ясно, что вы сознательно ссылаетесь на глобальное свойство и что это не случайность.

То же происходит, когда вы ссылаетесь на window.historyвместо history.Например, что если раньше в коде вы определили переменную

var histry;

, а затем использовали

props.addExperience(data, history);

Линтер не знает наверняка, пытаетесь ли выобратитесь к свойству на глобальном объекте, или если вы сделали опечатку.Итак, существует правило, чтобы вы явно указывали , что свойство находится в window (или для исправления имени переменной).

Что касается того, что на самом деле window.history, см. MDN :

Свойство Window.history только для чтения возвращает ссылку на объект History, который предоставляет интерфейс для управления историей сеанса браузера (страницы, посещенные ввкладка или фрейм, в который загружена текущая страница).

например

history.back();     // equivalent to clicking back button
history.go(-1);     // equivalent to history.back();
window.history.go(0); // refresh the current page
history.pushState(stateObj, "page 2", "bar.html"); // add an item to the history state
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...