[英]React using state array without mutation
是否可以重構以下代碼以便不改變 state 數組。 基本上,我希望當我通過 props.history.push 來回導航應用程序時,它不應該重新創建數組,因為我的目標是保留選定的選項。
const [options1, setOptions1] = useState([
{value: 'ABC', text: 'ABC', id: 1},
{value: 'DEF', text: 'DEF', id: 2}
]);
const [options2, setOptions2] = useState([
{value: 'ABC', text: 'ABC', id: 1},
{value: 'DEF', text: 'DEF', id: 2},
{value: 'XYZ', text: 'XYZ', id: 3}
]);
let finalOpts = options1; // Is there a better way to do this ?
if (someConditionIsTrue) {
finalOpts = options2;
}
const [selectedOpt, setSelectedOpt] = useState(finalOpts[0]);
<MyList
id="myDD"
selectedOpt={selectedOpt}
options={finalOpts}
/>
如果您的 UI 邏輯取決於某些條件,請使用 useMemo 來預先計算值。 如果卸載組件,僅此一項不會保留 selectedState。 為了即使在卸載組件后仍保留所選的 state,您必須將選擇存儲在某種全局 state 中。
const options = useMemo(() => {
if(someConditionIsTrue) {
return [
{value: 'ABC', text: 'ABC', id: 1},
{value: 'DEF', text: 'DEF', id: 2}
];
}
return [
{value: 'ABC', text: 'ABC', id: 1},
{value: 'DEF', text: 'DEF', id: 2},
{value: 'XYZ', text: 'XYZ', id: 3}
]
}, [someConditionIsTrue]);
const [selectedItem, setSelectedItem] = useState();
return (<MyList
id="myDD"
selectedOpt={selectedItem || options[0]}
onSelectionChanged={setSelectedItem}
options={options}
/>)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.