Основные действия.ts определяют общий вызов Axios как настраиваемый метод следующим образом, где заголовок включает в себя токен доступа, хранящийся в файлах cookie.
'use server'
...
export async function get(
url: string,
params?: Service.IParams
): Promise {
let result = request(HttpMethod.GET, url, {
params,
headers: setupHeaders(await getDecryptedToken() /* Token stored in cookie, so it uses await cookies() etc. */)
});
return result;
}
Файл DropDownServices.ts представляет собой его оболочку, которая определяет общие операции с URL-адресами и вызывает пользовательский метод get() вложенным способом.
'use server'
...
let urlKeyValueMap = new Map();
urlKeyValueMap.set("query1", "/lookup/query1");
urlKeyValueMap.set("query2", "/lookup/query2"); //etc.
export async function getDropDownList(urlKey: string): Promise{
let url = urlKeyValueMap.get(urlKey);
if(url) {
let result = await get(url); // This is the custom get() in actions.ts
return result;
} else {
let emptyArray:any = [];
return emptyArray;
}
}
Из клиентского компонента в Next.js 16 я вижу следующее:
- Если этот клиентский компонент вызывает getDropDownList , в первый раз он работает, но впоследствии не работает (ответ не получен и конечная точка не достигнута).
- Если этот клиентский компонент вызывает get напрямую, он работает всегда.
'use client'
...
useEffect(() => {
fetchData();
}, []);
const fetchData = async () => {
// THIS ALWAYS WORKS
//const dropdownList = await get('/lookup/query1');
// THIS NESTED SERVER CALL DOESN'T WORK ON 2nd TRY
const dropdownList = await getDropDownList('query1');
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... lient-call
Мобильная версия