簡體   English   中英

單擊復選框兩次以更新 state

[英]click twice on checkbox to update state

我正在通過這個數組進行映射

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

在數組的 map 之后,我有一個看起來像這樣的輸入

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

當我單擊復選框以激活或停用時,我想更改項目內部的 isActive,但數組應保持完整而不刪除任何元素

對於 function 這就是我得到的

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

它有效,但只有當我雙擊它時

嘗試使用 onChange 而不是 onClick

使用以下代碼:

<input
    id={item.id}
    type="checkbox"
    onChange={() => handleActive(item)}
    checked={item.isActiveMarket}
/>
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}
/>
  ))}
</>

...
...

您需要添加一個useEffect來更新 state:

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

  }, [items])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM