React 상태에서 Set 데이터 구조 사용
ES6를 사용할 수 있습니까?Set
데이터 구조를 선택할 수 있습니까?
예를 들어 체크리스트가 다른 항목으로 구성되어 있고 각 항목의 체크 상태를 유지하고 싶은 경우.나는 이렇게 쓰고 싶다.
export default class Checklist extends React.Component {
constructor(props) {
super(props);
this.state = {
checkedItems: new Set()
}
}
addItem(item) {
//...?
}
removeItem(item) {
//...?
}
getItemCheckedStatus(item) {
return this.state.checkedItems.has(item);
}
// More code...
}
세트는 원래 변동성이 있고 React는 컴포넌트를 갱신할 때 얄팍한 비교를 하기 때문에 불변의 오브젝트가 통과되어 그 상태로 유지되는 것을 기대하고 있습니다.단, Set 오브젝트를 스테이트로 유지하고 유지하는 방법은 있습니까?
react는 상태 속성이 교체되고 상태 속성이 변환되지 않은 경우에만 상태 변경을 식별하므로(비교 표시) 이전 집합에서 새 집합을 만들고 변경 사항을 적용해야 합니다.
이것은 다음부터 가능합니다.new Set(oldSet) !== oldSet
.
const oldSet = new Set([1, 2]);
const newSet = new Set(oldSet);
console.log(oldSet === newSet);
Set in 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...
}
에서 세트를 사용하는 방법useState()
갈고리를 채우다
이 예에서는 1~5 사이의 랜덤 정수를 추가한 다음 동일한 범위의 랜덤 수를 제거합니다.
const { useState } = React;
const Comp = () => {
const [state, setState] = useState(() => new Set());
const addItem = item => {
setState(prev => new Set(prev).add(item));
}
const removeItem = item => {
setState(prev => {
const next = new Set(prev);
next.delete(item);
return next;
});
}
return (
<div>
<button onClick={() => addItem(Math.ceil(Math.random() * 5))}>Add</button>
<button onClick={() => removeItem(Math.ceil(Math.random() * 5))}>Remove</button>
<div>
{Array.from(state)}
</div>
</div>
);
}
ReactDOM
.createRoot(root)
.render(<Comp />);
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<div id="root"></div>
state
그냥 흔한 물건일 뿐이지 원하는 걸 다 담을 수 있어다음 파일을 덮어쓸 수 있습니다.shouldComponentUpdate
라이프 사이클 방법을 직접 도입할 수 있습니다.독자적인 논리를 사용하여 컴포넌트의 갱신이 필요한지 여부를 확인할 수 있습니다.세트를 네스트할 필요도 없습니다.그냥 직접 설정만 하면 됩니다.state
:
this.state = new Set();
언급URL : https://stackoverflow.com/questions/44482788/using-a-set-data-structure-in-reacts-state
'programing' 카테고리의 다른 글
dbms_blob.getlength() vs. length()를 사용하여 Oracle에서 BLOB 크기를 검색합니다. (0) | 2023.03.18 |
---|---|
레일에서 뷰를 사용하여 JSON을 렌더링하려면 어떻게 해야 합니까? (0) | 2023.03.18 |
Meteor 앱 - 배포된 앱의 DB 리셋 (0) | 2023.03.18 |
JSON 직렬화에서 속성 이름의 기본 대소문자 (0) | 2023.03.18 |
잔가지/시간 표시자 테마에서 사용자 정의 자리 표시자 이미지 설정 (0) | 2023.03.18 |