我在 SolidJS 中有一個看起來像這樣的組件:
const MyComponent: Component = (params) => {
// ...
const [votes, setVotes] = createSignal(new Set());
const toggle = (val: string) => {
if (votes().has(val)) {
let _votes = votes();
_votes.delete(val);
setVotes(_votes);
} else {
let _votes = votes();
_votes.add(val);
setVotes(_votes);
}
}
return <>
<For each={someArray()}>{(opt, i) =>
<button
style={{
color: `${ votes().has(opt) ? "blue" : "black"}`
}}
onClick={() => { toggle(opt) } }
>
{opt()}
</button>
}</For>
</>
}
我想要發生的是,按鈕的樣式將根據它(opt在 for 回圈中)是否存在于votes集合中而改變。
但是,此代碼不起作用。更新投票時它不會更新。
投票變數確實按預期更新。
當我給選票設定一個初始值時,會顯示正確的樣式(但之后不會更新)。
有什么解決方案可以完成這項作業嗎?
uj5u.com熱心網友回復:
@Nick 所說的似乎是正確的,請嘗試將您的toggle方法更改為:
const toggle = (val: string) => {
const _votes = votes();
_votes.has(val) ? _votes.delete(val) : _votes.add(val);
setVotes(new Set(_votes));
}
操場
uj5u.com熱心網友回復:
@solid-primitives/set中有一個反應Set原語,您可以直接將其用作狀態而無需. 這可能會為您簡化事情。createSignal
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477939.html
標籤:javascript 打字稿 固体js
