【发布时间】:2020-04-23 06:59:24
【问题描述】:
仍在学习 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 工具上看到该按钮的 isSelected 的值变为 true。我还可以确认在状态的开发工具中单击的按钮的特定数组项(在钩子下),值为true。
点击按钮的文本不显示[ One true ] 如果我点击按钮一。我在这里错过了什么?
附:请注意,我还想更改按钮的类,但我认为如果我让按钮 isSelected 值在整个组件中是已知的,那部分将得到解决。
代码演示: https://codesandbox.io/s/laughing-keller-o5mds?file=/src/App.js:666-735
【问题讨论】:
标签: javascript reactjs react-hooks