eivindml:
私はES6を使用したいSet
と、私のリアクトコンポーネントにuseState()
とuseEffect()
。これは、との素晴らしい作品useState()
が、useEffect()
ときにトリガされていないSet
依存関係が変更されます。
ここでは、関連するコードです。onChange()
メモ化されます。
const Filter = ({ onChange }) => {
const [selected, setSelected] = useState(new Set())
console.log("Selected Set", selected)
useEffect(() => {
console.log("effect")
onChange(Array.from(selected))
}, [selected, onChange])
const handleClick = (topic) => {
selected.add(topic)
}
return (
<div className="filter">
</div>
)
}
私は私がこれを行うことができます知っているArray
が、の有益な特性を利用できるようにするとよいでしょうSet
たびに、ヘルパー関数を作成せず。
何か案は?
norbitrial:
私はこの問題は、あなたが直接、状態を変更しようとしていることから来ていると仮定しますselected
。あなたが使用している場合でも、Set
あなたはまだセッターを使用する必要があるsetSelected
との変化をトリガするために影響を与えているuseEffect
あなたが持っている一度selected
依存関係リストに。
私は何とか次のことをしようとするだろう。
useEffect(() => {
console.log('effect');
// your actions ...
}, [selected]);
const handleClick = (topic) => {
const newSelected = new Set(selected);
newSelected.add(topic);
setSelected(newSelected);
}
使用することによりnew Set(selected)
、あなたはの浅いコピーを作っているSet
からselected
、コンストラクタを使用して。その後、新たに作成された新しいアイテムを追加することができますSet
。最後に、あなたが使用する必要があるsetSelected
更新にselected
トリガする値useEffect
以前の予想通り。
私はそれが役に立てば幸い!