Я использую следующий код для извлечения данных из двух разных источников в реакции с использованием хуков.
const [ permissionTree, setPermissionTree ] = useState([]);
const [ availablePermissionsInRole, setAvailablePermissionsInRole ] = useState<Permission[]>([]);
const getAllPermissions = (): void => {
getPermissionList()
.then(response => {
if (response.status === 200 && response.data && response.data instanceof Array) {
const permissionStringArray = response.data;
let permissionTree: Permission[] = [];
permissionTree = permissionStringArray.reduce((arr, path) => addPath(
path, path.resourcePath.replace(/^\/|\/$/g, "").split('/'), arr,
), []);
setPermissionTree(permissionTree);
}
})
.catch(error => {
//Handle Permission Retrieval Properly
})
}
/**
* Retrieve permissions for a given role if in Role edit mode.
*/
useEffect(() => {
if (isEdit && roleObject) {
getPermissionsForRole(roleObject.id)
.then(response => {
if (response.status === 200 && response.data instanceof Array) {
const permissionsArray: Permission[] = [];
response.data.forEach(permission => {
permissionsArray.push({
id: permission,
isChecked: false,
fullPath: permission
})
})
setAvailablePermissionsInRole(permissionsArray);
getAllPermissions();
}
})
.catch(error => {
//Handle Role Retrieval Properly
})
} else {
getAllPermissions();
}
}, [])
Первый асинхронный c вызов getPermissionsForRole
возвращает строковый массив, а второй getAllPermissions
возвращает массив объектов, которые я затем анализирую в методе util для создания другого массива объектов.
С пустым массивом в качестве второго аргумента в useEffect
непрерывный асинхронный вызов c остановлен но когда я проверяю availablePermissionsInRole
внутри getAllPermissions
метода, он пуст. Когда я передаю availablePermissionsInRole
в качестве второго аргумента, возникает непрерывная l oop.
Что я делаю не так в этом коде. Пожалуйста, ведите меня, так как я новичок в реакции крючков.