Все еще изучаю некоторые веревки React.
У меня есть следующий код, где я отображаю список кнопок:
import React, { useState, useEffect } from 'react';
const MyComponent = (props) => {
const [buttonList, setButtonList] = useState([]);
useEffect(() => { getButtonList()}, [])
const getButtonList = () => {
let data = [
{id: 1, name: 'One', selected: false },
{id: 2, name: 'Two', selected: false },
{id: 3, name: 'Three', selected: false }
]
setButtonList(data)
}
const ButtonItem = ({ item }) => {
const btnClick = (event) => {
const id = event.target.value
buttonList.forEach((el) => {
el.isSelected = (el.id == id) ? true : false
})
setButtonList(buttonList)
console.log('buttonList', buttonList)
}
return (
<button type="button"
className={ "btn mx-2 " + (item.isSelected ? 'btn-primary' : 'btn-outline-primary') }
onClick={btnClick} value={item.id}>
{item.name + ' ' + item.isSelected}
</button>
)
}
return (
<div className="container-fluid">
<div className="card mb-3 rounded-lg">
<div className="card-body">
{
buttonList.map(item => (
<ButtonItem key={item.id} item={item} />
))
}
</div>
</div>
</div>
)
}
export default MyComponent;
Таким образом, кнопка рендерится:
[ One false ] [ Two false ] [ Three false ]
И когда я нажимаю любую кнопку, на Chrome React Tools я вижу, что значение для isSelected
этой кнопки становится true
. Я также могу подтвердить, что указанный элемент массива c для кнопки, нажатой в инструментах разработчика для State (под хуками), имеет значение true
.
Текст для нажатой кнопки не отображается [ One true ]
скажи, нажал ли я на кнопку Один. Что мне здесь не хватает?
PS Обратите внимание, что я также хочу изменить класс кнопки, но я думаю, что эта часть будет решена, если я получу значение кнопки isSelected
, которое будет известно всему компоненту.
Код демонстрации: https://codesandbox.io/s/laughing-keller-o5mds?file= / src / App. js: 666-735