반응형
후크를 사용하여 지도(사전) 상태 변경 시 구성 요소가 업데이트되지 않음
내게는 확인란이 있는 가시성 필터를 기반으로 이름을 표시해야 하는 하위 구성 요소가 있다.나는 각 이름에 대해 체크된 상태를 추적하기 위해 사전을 사용한다.그러나 내가 사전을 업데이트할 때 아이는 업데이트하지 않는다.
예: https://codesandbox.io/s/8k39xmxl52
구성 요소는 다음과 같다.
const App = () => {
const [names, setNames] = useState(seedNames);
const [hidden, setHidden] = useState(new Map());
const handleHidden = e => {
const name = e.target.name;
const hidden = e.target.checked;
setHidden(hidden.set(name, hidden));
};
return (
<div className="App">
<VisibilityFilter
names={names}
hidden={hidden}
handleHidden={handleHidden}
/>
<DisplayNames names={names} hidden={hidden} />
</div>
);
};
const VisibilityFilter = ({ names, hidden, handleHidden }) => {
return (
<div>
{names.map(name => (
<div key={name}>
<input
type="checkbox"
name={name}
checked={hidden.get(name)}
onChange={handleHidden}
defaultChecked
/>
<span>{name}</span>
</div>
))}
</div>
);
};
const DisplayNames = ({ names, hidden }) => {
const visibleNames = names.filter(name => !hidden.get(name));
return (
<div>
{visibleNames.map(name => (
<div key={name}>{name}</div>
))}
</div>
);
};
불변 상태의 사용은 Reaction에 관용적이며, 일반 물체나 배열과 같은 단순한 유형이 사용될 것으로 예상된다.
지도set
같은 지도를 반환하는 동안useState
불변의 상태만을 지지한다.세터 기능이 동일한 상태로 호출되는 경우 구성 요소는 업데이트되지 않는다.
setHidden(hidden.set(name, hidden))
국가는 불변적으로 유지되어야 한다.
setHidden(new Map(hidden.set(name, hidden)))
이것은 약간의 오버헤드를 도입할 수 있고 ES6의 가능한 편익을 저해할 수 있다.Map
. 그렇지 않다면.Map
엄격한 항목 순서 및 비 문자열 키와 같은 기능이 요구되며, 동일한 목적으로 일반 객체를 사용하는 것이 바람직하다.
반응형
'programing' 카테고리의 다른 글
ReactMarkDown 내에서 JSX 렌더링 (0) | 2022.03.19 |
---|---|
제공/주체 또는 Vuex? (0) | 2022.03.19 |
사용자 지정 후크가 useEffect에서 제대로 작동하지 않음 (0) | 2022.03.19 |
python으로 밀리초가 포함된 시간 문자열을 구문 분석하려면 어떻게 해야 하는가? (0) | 2022.03.19 |
Vue 2방향 프로펠러 바인딩 (0) | 2022.03.19 |