Handle more than 200 checkboxes storing them in state

后端 未结 1 1159
后悔当初
后悔当初 2021-01-16 07:09

I have a table (parent element) which fetches users and render each row as it\'s own component. Row in a table contains checkbox.

Goal is to be able to use checkbox

1条回答
  •  -上瘾入骨i
    2021-01-16 07:21

    Here is an optimized function that will toggle an item without re rendering the entire list and using a list from useState:

    import React, { useEffect, useState } from 'react';
    
    const Parent = () => {
      //list is created and maintained in parent
      const [list, setList] = useState([
        { id: 1, val: true },
        { id: 2, val: true },
      ]);
      //toggle is id to indicate what item to toggle
      const [toggle, setToggle] = useState();
      useEffect(() => {
        if (toggle) {
          //setting toggle will not re render until
          //  function is finished so no infinite loop
          setToggle();
          //here we can toggle the item from the list
          setList(
            list.map(item =>
              item.id === toggle
                ? { ...item, val: !item.val }
                : item
            )
          );
        }
      }, [list, toggle]);
      //combining parent container with parent presentational
      //  for simplicity
      return (
        
    {list.map(item => ( ))}
    ); }; const ItemContainer = React.memo(function Item({ item, itemClicked, }) { //toggeling item with id 1 will not log // for item with id 2 console.log('in item render:', item.id); return (
     itemClicked(item.id)}>
          {JSON.stringify(item, undefined, 2)}
        
    ); }); export default Parent;

    Here is an example of how to do it with useReducer.

    0 讨论(0)
提交回复
热议问题