Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как рендерится массив в react при передаче его в value?

Здравствуйте!

import './style.css';
import { useState } from 'react';

function Square({value, handleClick}){

	return <button 
			className="square"
			onClick={handleClick}
		>
			{value}
		</button>
};

export function Board() {

	const [squares, setSquare] = useState(Array(9).fill(null));

	function squareHandleClick(e){
		setSquare("X");
	};

	return (
		<>
			<div className="board-row">
				<Square value={squares} handleClick={squareHandleClick}/>
				<Square />
				<Square value={squares} handleClick={squareHandleClick}/>
			</div>
		</>
	);
}

почему при клике в двух компонентах <Square /> отображается значение "X" ? Через пропсы мы передаём массив значений value={squares} а не конкретное значение из этого массива (например squares[0]) а по факту реакт берёт первый элемент этого массива и отображает его. Если проверить это с использованием обычного js то результат будет предсказуемым и ДОМ элементе отобразится текстовой представление массива (насколько помню с помощью вызова [].toString()) т.е. полного массива, а не одного его элемента.
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
@historydev
Острая аллергия на анимешников
Ты при клике изменяешь состояние squares, заменяешь массив на "X", все твои компоненты Square слушают состояние squares через пропсы, соответственно он везде и будет "X".

Если тебе нужно инкапсулировать состояние squares, перенеси его в компонент Square как и обработчик клика.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы