У меня есть компонент React с двумя входами select; Select A позволяет вам выбрать размер, а затем, в зависимости от того, что выбрано, этот размер передается в обработчик React (getPackageBySize), который выполняет запрос GET, который возвращает список параметров этого размера для Select B. Итак:
Select A = 100 should return options ['A','B','C']
Select A = 50 should return options ['X','Y','Z']
Когда компонент загружается с начальным значением размера "100", он загружает правильные параметры для выбора B (['A', 'B', 'C']). Однако, если я затем выберу новый размер из Select A, он не обновит параметры в Select B до ['X', 'Y', 'Z']. Вот ловушка:
const [
options,
refetchOptions,
] = getPackageBySize(
props.size
);
И ловушка useEffect, которая снова вызывает первую ловушку при каждом изменении размера:
useEffect(() => {
refetchOptions(
props.size
);
}, [props.size]);
И 'getPackageBySize':
export default (size: string) => {
const dispatch = useDispatch();
const [fetch, reFetch] = useAxios({
options: {
method: 'get',
headers: {
Authorization: getAuthToken(),
'Content-Type': 'application/json',
url:
`${routes.search.api.ROOT}` +
'?q=TYPE:"package" AND =size:"' +
size +
'"',
},
forceDispatch: () => true,
handler: (error: any, response: any) => {
if (error) {
dispatch(
addToast({
labels: {
heading: 'Error',
details: `${error.message}`,
},
variant: 'error',
})
);
}
if (response) {
return console.log('Response: ', response);
}
},
});
return [fetch, reFetch];
};
Таким образом, при начальной загрузке он ищет размер по умолчанию 100 и возвращает ['A', 'B', 'C']. Когда я изменяю Select A на 50, я вижу, что getPackageBySize получает правильный аргумент размера '50'. Он вставляет его в URL-адрес, и запрос обрабатывается, однако, когда я получаю ответ, я вижу, что URL-адрес в ответе все еще использует исходный размер:
url: "http://localhost:4001/http://site.local:8080/search/content?q=TYPE:"package" AND =size:"100""
Если я выйду со страницы, а затем return, он выполняет запрос с правильным значением 50, и я получаю обратно ['X', 'Y', 'Z'].
Кто-нибудь знает, как обеспечить обновление URL-адресов, не выходя из страницу и вернуться?