Я пытаюсь закодировать визуальную реализацию «блокчейна» в React. Я хочу как-то удерживать внутри массива объектов (это мои блоки) индекс каждого объекта. Я не могу понять, как это сделать.
this.state = {
value: '',
blocks: [{
hash: calculateHash(1),
timestamp: timeStamp(),
dataOfBlock: 'Genesis Block',
nounce: 607,
index: 0
}]
}
};
addBlock = (event) => {
event.preventDefault();
this.setState({
blocks: [...this.state.blocks, {
hash: 'cos',
timestamp: timeStamp(),
dataOfBlock: this.state.value,
nounce: '',
index: 1 // here's the problem
}]
})
}
Мой код имитирует то, что я хочу сделать, где комментарий. Я хочу постоянно добавлять +1 к моему индексу с каждым блоком.
index: this.state.blocks.length+1, предложение: используйте prevState вместо this.state внутри setState.
боже, это было так просто, спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать length в качестве индекса нового объекта при добавлении нового объекта
Примечание: this.state.blocks.length будет следующим индексом, потому что индекс начинается с 0
blocks: [...this.state.blocks, {
hash: 'cos',
timestamp: timeStamp(),
dataOfBlock: this.state.value,
nounce: '',
index: this.state.blocks.length
}]
если вы всегда добавляете в конец массива, вы можете сделать индекс this.state.blocks.length, потому что длина предыдущего массива будет точкой индекса нового блока