[英]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.