Using a Set data structure in React's state

前端 未结 2 1683
无人共我
无人共我 2021-02-03 19:45

Is it possible to use ES6\'s Set data structure in React?

For example, if I have a checklist composed of distinct items, and I\'d like to maintain each item

2条回答
  •  感情败类
    2021-02-03 20:11

    Since react will identify state changes only if the state property was replaced, and not mutated (shallow compare), you'll have to create a new Set from the old one, and apply the changes to it.

    This is possible since new Set(oldSet) !== oldSet.

    const oldSet = new Set([1, 2]);
    const newSet = new Set(oldSet);
    
    console.log(oldSet === newSet);

    And this is how you use it in your class:

    export default class Checklist extends React.Component {
      constructor(props) {
        super(props);
    
        this.state = {
          checkedItems: new Set()
        }
    
        this.addItem = this.addItem.bind(this);
        this.removeItem = this.removeItem.bind(this);
      }
    
      addItem(item) {
        this.setState(({ checkedItems }) => ({
          checkedItems: new Set(checkedItems).add(item)
        }));
      }
    
      removeItem(item) {
        this.setState(({ checkedItems }) => {
          const newChecked = new Set(checkedItems);
          newChecked.delete(item);
    
          return {
           checkedItems: newChecked
          };
        });
      }
    
      getItemCheckedStatus(item) {
        return this.state.checkedItems.has(item);
      }
    
      // More code...
    }
    

提交回复
热议问题