我有一个简单形式的组件。它有一个input,当用户输入某些值时,它会使用该值进行 API 调用,以获取一个选项数组,然后用这些选项填充一个select.
我能够毫无问题地测试对输入的更改 - 通过模拟事件,我能够执行第一个挂钩。
但我的问题是我有两个useEffect相互链接的钩子。由于第一个钩子的内部被嘲笑,我不知道如何让它触发第二个钩子并呈现新的结果。
这是我正在使用的两个钩子的简化版本:
Component.tsx
React.useEffect(() => {
const request = new XMLHttpRequest();
request.open('GET', `${api}?arg=${inputValue}`, true);
request.onload = (e: ProgressEvent) => {
const res = e.target as XMLHttpRequest;
if (res.status >= 200 && res.status < 400) {
const data = JSON.parse(res.response);
setList(data.list);
}
}
};
request.send();
}, [inputValue]);
...
React.useEffect(() => {
select.current.innerHTML = '<option value="" disabled selected>Select...</option>';
if (list.length > 1) {
list.forEach((item) => {
select.current.innerHTML += `<option value="${item.name}">${item.name}</option>`;
});
}
}, [list]);
因此,当 inputValue 更改时,组件必须检索一个新列表。当列表更改时,<select>更新中的选项。
目前,我正在以类似于此处描述的方式模拟 XMLHttpRequest:https ://stackoverflow.com/a/43893305/
如何以触发内部更改的方式编写模拟此请求,以便执行第二个挂钩?还是我以错误的方式解决这个问题?