我有一个打开对话框以提供输入的组件:
function App() {
const [toggle, setToggle] = useState(false);
return (
<>
<button onClick={setToggle(true)}>Show Dialog</button>
</>
);
}
export default App;
这是打开的对话框组件:
function Dialog() {
return (
<>
<span>
<div> Name: </div>
<input type="text" />
</span>
<span>
<div> Select: </div>
<SelectionBox/>
</span>
</>
);
}
export default Dialog;
选择框组件代码如下:
function SelectionBox() {
const [value, setValue] = useState("");
const [options, setOptions] = useState([]);
const apiCalls = () => {
service.getData1().then((data) => {
service.getData2(data).then((opt) => {
setOptions(opt);
}).catch((e1) => {
console.log(e1);
});
}).catch((e) => {
console.log(e);
});
};
return (
<>
<Select
label="select"
options={options}
value={value}
/>
</>
);
}
export default SelectionBox;
选择框组件调用两个API来获取和显示选择框中的数据。这个API调用需要时间,我想在打开对话框时只调用一次API,并记住该响应以进行进一步的对话框操作。这个选择框也可以在其他地方重复使用,并且所有地方的数据都是相同的。我如何才能实现这一点?
PS:我想在组件挂载的时候调用API。另外,不要打开使用任何库。
1条答案
按热度按时间gab6jxml1#
你可以在
useEffect
和localStorage
的帮助下做到这一点。在每次挂载时,你都要检查localStorage
中是否有保存的数据,如果有,就使用它,否则你就调用你的API,并将结果存储在localStorage
中。类似这样: