单击复选框两次以更新状态

问题描述 投票:0回答:5

我正在通过这个数组进行映射

array=[
    {'id': 1, 'isActive': true, 'name': apple}, 
    {'id': 2, 'isActive': false, 'name': orange}, 
    {'id': 3, 'isActive': false, 'name': forest}
]

我有一个在数组映射后看起来像这样的输入

<input
    id={item.id}
    type="checkbox"
    onClick={() => handleActive(item)}
    checked={item.isActiveMarket}
/>

当我单击复选框以激活或停用时,我想更改项目内的 isActive ,但数组应保持完整状态而不删除任何元素

对于这个功能,这就是我得到的

const handleActive = (item) => {
    item.isActive = !item.isActive;
};

它有效,但只有当我双击它时

javascript reactjs checkbox onclick onchange
5个回答
0
投票

尝试使用onChange而不是onClick


0
投票

使用以下代码:

<input
    id={item.id}
    type="checkbox"
    onChange={() => handleActive(item)}
    checked={item.isActiveMarket}
/>

0
投票
const initialState = [
    {'id': 1, 'isActive': true, 'name': apple}, 
    {'id': 2, 'isActive': false, 'name': orange}, 
    {'id': 3, 'isActive': false, 'name': forest}
];

const [items, setItems] = useState(initialState);

const onActiveToggle = (id) => {
    const item = items.find(item => item.id === id);

    setItems(prev => prev.splice(prev.indexOf(item), 1, {...item, isActive: !item.isActive}));
}

...
...
<>
  {items.map((item, index) => (
    <input
    key={item.id}
    id={item.id}
    type="checkbox"
    onChange={() => handleActive(item.id)}
    checked={item.isActive}
/>
  ))}
</>

...
...

0
投票

您需要添加

useEffect
来更新状态:

  useEffect(() => {
    // console.log('items useEffect runs')

  }, [items])

0
投票

React 似乎存在状态同步错误行为。添加 key 属性并将其设置为选中状态,这样就可以触发渲染了。

<input
    id={item.id}
    type="checkbox"
    onClick={() => handleActive(item)}
    checked={item.isActiveMarket}
    key={item.id}
/>
© www.soinside.com 2019 - 2024. All rights reserved.