В componentDidUpdate делаю второй поход за данными, что бы после добавления новой задачи( компонент AddTaskInput), изменения статуса или удаления (компонент Task), что бы ре-рендерить TaskList, но рендер происходит сразу же и получается зацикливание. Проверку в componentDidUpdate делал по примеру. Как избежать зацикливания?
import React from 'react'
import { Task } from './Task'
import { AddTaskInput } from './AddTaskInput.jsx'
export class TaskList extends React.Component {
constructor(props) {
super(props)
console.log("constructor")
this.state = {
tasks:null,
isLoading: true
}
}
getTodos() {
fetch('api/tasks')
.then(response => response.json())
.then(tasks => this.setState({
tasks,
isLoading: false,
}));
}
componentDidMount() {
this.getTodos()
console.log('DidMount')
}
componentDidUpdate(prevState){
if(prevState.tasks !== this.state.tasks){
this.getTodos()
}
}
render() {
console.log("render")
return this.state.isLoading ?
'...Loading...' : (
<>
<AddTaskInput/>
<div className="listWrapper">
<ul className="taskList">
<Task
tasks = {this.state.tasks}
/>
</ul>
</div>
</>
)
}
}
Вы пытаетесь сравнить два массива
prevState.tasks !== this.state.tasks
так в js не работает и выражение всегда будет истинно, т.е. вы бесконечно будете вызывать getTodos()
, который в свою очередь меняет стейт, что опять приводит к вызову componentDidUpdate
.
Вместо componentDidUpdate
лучше сделайте отдельные методы для добавления задачи и для удаления задачи, в которых после необходимых действий будете вызывать getTodos()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Предположим имеется 1 изображение машиныНеобходимо создать два объекта Image с этой машиной и двигать эти два изображения асинхронно
Изучая backend, столкнулся с такой проблемой недопонимания: есть сайт, сервер Nodejs (в принципе, какой угодно, но меня интересует именно Nodejs) и зашел...
Никак не получается добиться желаемого результата со slider-ом жуквэриЕсть шаг в 5, хотелось бы получить labels в виде 1,5,10,15,20 и т
Есть вот такой код формыОн по сути отправляет директорию, в которой расположено изображение и само название изображения