Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.11.2021, 10:11
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

Ract 17+TypeScript
Доброе время суток
какая-то чертовщина, заблудился в 3 соснах.
todo.a увеличивается не на 1, а на два. Данный кусок кода срабатывает два раза.
toggleHander исходя и логов срабатывает один раз, в newTodo перед return нужный результат
но уже в useEffect (который также срабатывает один раз исходя из логов) результат двойной

Код:
export interface ITodo{
  title:string,
  id:number,
  completed:boolean,
  a:number
}
.................
  const [todos, setTodos]=useState<ITodo[]>([])
  useEffect(()=>{
    console.log(todos)
  },[todos])
  const toggleHander=(id:number)=>{
    setTodos(prev=>{
      const newTodo:ITodo[]=prev.map(todo=>{
        if(todo.id === id){ 
          console.log('+')
          todo.completed = !todo.completed
          todo.a=todo.a+1
          // todo.completed=false
        }else{console.log('-')}
        // console.log(todo)
        return todo
      })
      newTodo.forEach(e=>console.log(e))
      return newTodo
    })
  }
  const
Ответить с цитированием
  #2 (permalink)  
Старый 03.11.2021, 12:51
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

todo - объёкт, объекты передаёются по ссылке, меняя a - ты меняешь его в исходном, чего делать в React нельзя.
const newTodo:ITodo[] = prev.map(todo=>{
        if(todo.id === id){ 
          console.log('+')

          return {...todo, completed: !todo.completed, a: todo.a+1};
        }else{console.log('-')}
        // console.log(todo)
        return todo
})

Не знаю правда связанно ли это с твоей проблемой, но такая хрень может привести к множеству странных эффектов.)
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 03.11.2021, 14:24
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 108

Aetae,
Ты прав, проблема была в этом.
Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужны JS разработчики на постоянную удаленную работу (с CoffeeScript TypeScript) dubtsov Работа 0 16.06.2017 11:00
Настройка emmet под typescript в brackets padr1no Angular.js 0 29.03.2017 14:09
Senior Frontend в Cian.ru (React.js и TypeScript) Anna-HR Работа 0 19.03.2017 06:06
Настройка компиляции TypeScript ruslan_mart Общие вопросы Javascript 4 30.05.2016 21:29
TypeScript for Large App Angularjs kodermax Angular.js 1 25.03.2015 22:58