Как изменять массив внутри state c использованием TS?
Помогите, я уже почтив отчаяние. Не могу вкурить как обновить массив внутри стейта. У меня есть массив обьектов, где каждый обьект имеет массив овтетов, которые выбрал пользователь. При нажатии на существующий checkbox, требуется обновлять это состояние, дописываю/удаляя значение в массив соответствующего вопросу объекта
type Result = number
interface Answer {
result: Result[]
}
const answers: Answer[] = [];
questions.forEach(()=>{
answers.push({
result:[]
});
})
Здесь ошибка
const [currentAnswer, setNewAnswer] = useState<Answer[]>(answers)
const handleChange = (e:React.ChangeEvent<HTMLInputElement>) =>{
// console.log(typeof(currentAnswer),currentAnswer);
if(e.target.checked){
console.log(currentAnswer[currentQuestion].result.push(Number(e.target.id)));
setNewAnswer(
currentAnswer[currentQuestion].result.push(Number(e.target.id) // ERROR HERE
)
.........
Сама ошибка
const currentAnswer: Answer[]
Argument of type 'number' is not assignable to parameter of type 'SetStateAction<Answer[]>'
Ответы (2 шт):
Автор решения: HTMLProgrammer
→ Ссылка
Array.push возвращает значение, которое было добавлено в массив. Попробуйте:
currentAnswer[currentQuestion].result.push(Number(e.target.id)
setNewAnswer(currentAnswer);
Автор решения: folen
→ Ссылка
Требовалось создать клон существующего массива, добавить в него новые элементы, а уже потом использовать setState()
let newAnswer = [...currentAnswer];
newAnswer[currentQuestion].result.push(parseInt(e.target.id));
setNewAnswer(newAnswer);