TransWikia.com

React js сделать запись в local storage

Stack Overflow на русском Asked on December 20, 2020

Надо после закрытия браузера, при открытии вновь сохранялись все задачи в todo.

Сайт: https://react-todo-app3.vercel.app
Репозиторий на гит: https://github.com/paul76546/react-todo-app3

import React, { useState } from 'react';
import TodoForm from './TodoForm';
import Todo from './Todo';

function TodoList() {
  const [todos, setTodos] = useState([]);

  const addTodo = todo => {
    if (!todo.text || /^s*$/.test(todo.text)) {
      return;
    }

    const newTodos = [todo, ...todos];

    setTodos(newTodos);
    console.log(...todos);
  };

  const updateTodo = (todoId, newValue) => {
    if (!newValue.text || /^s*$/.test(newValue.text)) {
      return;
    }

    setTodos(prev => prev.map(item => (item.id === todoId ? newValue : item)));
  };

  const removeTodo = id => {
    const removedArr = [...todos].filter(todo => todo.id !== id);

    setTodos(removedArr);
  };

  const completeTodo = id => {
    let updatedTodos = todos.map(todo => {
      if (todo.id === id) {
        todo.isComplete = !todo.isComplete;
      }
      return todo;
    });
    setTodos(updatedTodos);
  };

  //h1 заголовок Какие планы на сегодня? 
  // (What's the Plan for Today?) по английскому
  // меняю на Список дел на сегодня
  //ставлю обратно 
  return (
    <>
      <h1>What's the Plan for Today?</h1>
      <TodoForm onSubmit={addTodo} />
      <Todo
        todos={todos}
        completeTodo={completeTodo}
        removeTodo={removeTodo}
        updateTodo={updateTodo}
      />
    </>
  );
}

export default TodoList;

2 Answers

Строку с инициализацией состояния todos переделываем на:

const [todos, setTodos] = useState(localStorage.getItem('todos') ? JSON.parse(localStorage.getItem('todos')) : []);

Добавляем еще одну функцию (например: setTodosWithSave):

const setTodosWithSave = (newTodos) => {
      setTodos(newTodos);
      localStorage.setItem('todos', JSON.stringify(newTodos))
}

В функциях addTodo, updateTodo, removeTodo, completeTodo меняете функцию setTodos на setTodosWithSave

Correct answer by Илья Паймушкин on December 20, 2020

//import {reactLocalStorage} from 'reactjs-localstorage';
import TodoForm from './TodoForm';
import Todo from './Todo';

function TodoList() {
  //const [todos, setTodos] = useState([]);переделываем на 
  const [todos, setTodos] = useState(localStorage.getItem('todos') ? JSON.parse(localStorage.getItem('todos')) : []);
  
  //добавляем еще одну функцию
  const setTodosWithSave = (newTodos) => {
    setTodos(newTodos);
    localStorage.setItem('todos', JSON.stringify(newTodos))
};

  const addTodo = todo => {
    if (!todo.text || /^s*$/.test(todo.text)) {
      return;
    }

    const newTodos = [todo, ...todos];

    setTodosWithSave(newTodos);
    console.log(...todos);
  };
//перед консоль лог было setTodos(newTodos);
  

  const updateTodo = (todoId, newValue) => {
    if (!newValue.text || /^s*$/.test(newValue.text)) {
      return;
    }

    setTodos(prev => prev.map(item => (item.id === todoId ? newValue : item)));
    

  };
//34  строка?
  const removeTodo = id => {
    const removedArr = [...todos].filter(todo => todo.id !== id);

    setTodosWithSave(removedArr);
  };

  const completeTodo = id => {
    let updatedTodos = todos.map(todo => {
      if (todo.id === id) {
        todo.isComplete = !todo.isComplete;
      }
      return todo;
    });
    setTodosWithSave(updatedTodos);
  };

  
  //let toLocal = reactLocalStorage.setObject('var', {'test': 'test'});?????How
  
  //h1 заголовок Какие планы на сегодня? 
  // (What's the Plan for Today?) по английскому
  // меняю на Список дел на сегодня
  //ставлю обратно 
  return (
    <>
      <h1>Список дел на сегодня</h1>
      <TodoForm onSubmit={addTodo} />
      <Todo
        todos={todos}
        completeTodo={completeTodo}
        removeTodo={removeTodo}
        updateTodo={updateTodo}
      />
    </>
  );
}

export default TodoList;

Answered by Пауль Джун on December 20, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP