Я завершил приложение To do без локального хранилища, поэтому теперь нужно узнать, как работает локальное хранилище, и провести рефакторинг приложения, чтобы оно могло работать с локальным хранилищем.

Локальное хранилище — это веб-хранилище, в котором хранятся данные без срока годности.

Есть 4 метода, о которых я узнал, чтобы сделать с локальным хранилищем. setItem(), getItem(), removeItem() и clear()

SetItem() — добавляет ключ и значение в локальное хранилище.

Когда вы впервые заходите в приложение To do без локального хранилища, открываете инструменты разработчика и вводите localStorage; в консоль, ничего не появляется, так как ничего не сохраняется в локальном хранилище. Вы можете добавить вещи в локальное хранилище, выполнив следующие действия:

 localStorage.setItem('todos', 'Make Breakfast');

Затем, когда вы наберете localStorage;, он будет отображаться следующим образом.

localStorage;
Storage{todos: "Make Breakfast", length:1};

Вы можете добавить несколько вещей в локальное хранилище следующим образом:

localStorage.setItem('doNotDo', 'Sleep in');
localStorage;
Storage{doNotDo: "Sleep in", toDos: "Make Breakfast", length: 2}

GetItem() — получить значение по ключу, а не по всему массиву, как показано выше. Он нацелен на определенные значения в локальном хранилище. Вы можете сделать это с помощью следующего кода:

localStorage.getItem('todos');//will return "Make Breakfast"

RemoveItem() — удалить элемент по ключу

localStorage.removeItem('doNotdo'); 

Теперь, когда вы вводите localStorage, он будет показывать только задачи, а не doNotdos.

Clear() — очистить все хранилище. Это очищает все локальное хранилище, а не только один ключ, такой как removeItem(). Вы можете сделать это следующим образом:

localStorage.clear();

Теперь, когда мы введем localStorage, он будет пуст.

Теперь пришло время вернуться к приложению To Do и реорганизовать его с помощью локального хранилища.

Сначала мне нужно было объявить переменную todosArray для хранения наших задач. Я установлю это как пустой массив. Это важно, потому что в локальном хранилище мы хотим, чтобы наш ключ todos представлял растущий список значений todos, а не только одно значение todo.

Следующей задачей было использование метода setItem(), как упоминалось ранее, для установки todos в строку с помощью JSON.stringify().

JSON.stringify() используется, потому что localStorage работает со строками. JSON.stringify() преобразует объекты Javascript в строковый формат с использованием JSON. Это позволяет мне отправлять объекты Javascript из веб-браузера в локальное хранилище.

Я сделал это с помощью следующего кода:

localStorage.setItem('todos', JSON.stringify(todosArray));

Следующим шагом была возможность доступа к ключу todos и его значению в приложении. Это позволит пользователю закрыть браузер или обновить браузер, но при этом иметь доступ ко всем задачам.

Я объявил переменную «storage», которая содержит всю информацию в localStorage. Мне пришлось использовать метод JSON.parse(), который преобразует строку из локального хранилища в данные, к которым я могу получить доступ с помощью JavaScript. При получении данных с веб-сервера данные всегда представляют собой строку. Поэтому мне нужно проанализировать данные с помощью JSON.parse(), и данные станут объектом JavaScript.

Я сделал это с помощью следующего кода:

var storage= JSON.parse(localStorage.getItem('todos'));

Далее нужно было разобраться с формой. Всякий раз, когда пользователь отправляет задачу, я хотел отобразить ее на странице с помощью функции todoMaker, как я делал в v1, но теперь я также хочу добавить этот пользовательский ввод в мой todosArray, а затем обновить наши элементы задач с помощью этого массива в локальном хранилище.

Сначала мне пришлось вставить input.value в todosArray.

todosArray.push(input.value);

Затем мне пришлось обновить todosArray в localStorage. Я использовал метод setItem() с ключом todos и значением todosArray в виде строки с методом JSON.stringify().

localStorage.setItem('todos', JSON.stringify(todosArray));

Теперь я проверил, чтобы убедиться, что он сохраняет его в локальном хранилище на веб-странице, и…….успех!!!

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

Я узнал, что, просматривая код до сих пор, каждый раз, когда страница обновляется, мы запускаем JavaScript и устанавливаем todosArray в пустой массив в соответствии с кодом:

var todosArray = []; 

И затем локальное хранилище устанавливается на этот пустой массив.

Поэтому мне нужно внести изменения в код. Сначала я закомментировал пустой массив todos. А затем создал новый массив.

Этот новый массив todos будет включать оператора токаря. Это рассмотрит код, который мы предоставляем, и создаст условие — если в локальном хранилище задач есть ключ, то это правда, если нет — ложь. Если это правда, то есть ?, и то, что показано после ?, — это то, что я хочу, чтобы произошло, если то, что я делаю, верно. В таком случае. Я установил для todosArray значение JSON.parse(localStorage.getItem('todos');, это означает, что при обновлении страницы todosArray будет немедленно установлен на todos в локальном хранилище. Если условие ложно, то после двоеточия: следует то, что мы хотим, чтобы код делал, если оно ложно. В данном случае это пустой массив [];

Это было немного, чтобы прийти в себя, но я думаю, что в основном я понял. Весь код выглядит так.

var todosArray = localStorage.getItem('todos') ? JSON.parse(localStorage.getItem('todos')) : [];

Теперь, чтобы проверить, если это сработало…. Ура!

Список пуст, но задачи по-прежнему сохраняются в локальном хранилище. Причина, по которой задачи не отображаются, заключается в том, что нет кода для создания каких-либо задач из того, что находится в локальном хранилище. В настоящее время форма вызывает функцию todoMaker, когда пользователь вводит данные. Итак, теперь мне нужно добавить код, который будет запускать todoMaker поверх localStorage.

Итак, теперь я зациклился на localStorage, когда пользователь впервые открывает pgae, и запускаю функцию todoMaker для каждой задачи в массиве. Чтобы сделать это, я использовал цикл For, чтобы перебрать переменную хранилища и запустить todoMaker для каждого элемента в массиве. Я инициализировал цикл For с 0, так как хотел начать с начала массива. Затем цикл For проверяет, меньше ли i длины массива (storage.length), а затем добавит единицу к i и снова проверит условие. В блоке кода я вызвал функцию todoMaker для массива хранения в расположении [i]. TodoMaker создаст элемент списка и будет использовать свойство текстового содержимого, чтобы установить текст в соответствии с хранилищем в элементе местоположения i. Это добавит к переменной списка задач, которая нацелена на неупорядоченный список для отображения задачи. Код выглядит следующим образом:

for (var i = 0; i < storage.length; i++) {
todoMaker(storage[i]);
}

Отлично… элементы списка остаются при обновлении страницы.

Одна последняя проблема заключается в том, что все работает только до тех пор, пока я не обновлю страницу, а затем они вернутся, поскольку они хранятся в локальном хранилище. Чтобы исправить это, мне нужно было очистить localStorage с помощью метода clear() под кнопкой.addEventListener

localStorage.clear();

Теперь, когда я нажимаю «Очистить» и «Обновить», все исчезает. Ву ху.

И теперь я создал базовое приложение для работы с локальным хранилищем. Код выглядел так:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>TodoTracker</title>
</head>
<body>
<h1 id="title">Todo Tracker</h1>
<form>
<input type="text" id="user-todo" placeholder="New Todo" required>
</form>
<h2 id="todo-header">Todos</h2>
<ul>
</ul>
<button id="clear">Clear All</button>
<script>
var form = document.querySelector('form');
var todoList = document.querySelector('ul');
var button = document.querySelector('button');
var input = document.getElementById('user-todo');
// var todosArray = [];
var todosArray = localStorage.getItem('todos') ? JSON.parse(localStorage.getItem('todos')) : [];
localStorage.setItem('todos', JSON.stringify(todosArray));
var storage = JSON.parse(localStorage.getItem('todos'));
form.addEventListener('submit', function (e) {
e.preventDefault();
todosArray.push(input.value);
localStorage.setItem('todos', JSON.stringify(todosArray));
todoMaker(input.value);
input.value = "";
});
var todoMaker = function (text) {
var todo = document.createElement('li');
todo.textContent = text;
todoList.appendChild(todo);
}
for (var i = 0; i < storage.length; i++) {
todoMaker(storage[i]);
}
button.addEventListener('click', function () {
localStorage.clear();
while (todoList.firstChild) {
todoList.removeChild(todoList.firstChild);
}
});
</script>
</body>
</html>

Поэтому мне определенно нужно было руководство инструктора, чтобы создать это, но я чувствовал, что у меня было довольно хорошее понимание того, как он проходил через это, и я в восторге от конечного результата.

Далее следует краткий урок по CSS, а затем изучение хостинга.