доброго дня всем,
Я работаю над реактивным проектом, в котором у меня есть сборщик, чтобы выбрать компанию, из которой будут получены ваши данные.
когда я щелкаю по средству выбора, он ведет себя нормально и значение изменяется соответствующим образом, но состояние компонента получает предыдущее избыточное состояние при каждом изменении значения.
Например, если старое сохраненное значение - «компания», то при следующем щелчке это значение будет преобразовано в состояние компонента вместо значения, которое я выбрал в средстве выбора.
это моя функция выбора выбора:
updateCompany = (id) => {
try {
const name = this.getNameFromID(id);
this.setState({loading: true});
this.props.saveChosenCompany(this.state.username, { id, name });
this.props.getPermissions();
console.log('on change permissions: ', this.state.permissions);
const cards = this.initCardData(this.props.permissions);
this.setState({
permissions: this.props.permissions,
cards,
loading: false,
selectedCompanyID: id,
selectedCompanyName: name
});
} catch (error) {
console.log("update err: ", error);
}
}
это мои редукционные действия:
действия разрешения:
export const getPermissions = () => dispatch => {
Promise.all([AsyncStorage.getItem("token"),AsyncStorage.getItem("uname")])
.then(([token, uname]) => {
AsyncStorage.getItem(`${uname}.companyName`).then((chosenCompanyName) => {
if(chosenCompanyName){
fetch(
`http://${env.ip}:${env.port}/permissions`,
{
method: "POST",
headers: {
"content-type": "application/json",
accept: "application/json",
Authorization: "Bearer " + token
},
body: JSON.stringify({
company: chosenCompanyName
})
}
)
.then(permissions => permissions.json())
.then(permissions => {
AsyncStorage.setItem(`${uname}.${chosenCompanyName}.permissions`, JSON.stringify(permissions))
.then(() => {
dispatch({
type: GET_PERMISSIONS,
payload: permissions
});
})
})
.catch(err => console.log('getPermissions error: ',err));
}
});
})
.catch(err => console.log('getPermissions error: ',err));
};
export const initPermissions = () => dispatch => {
AsyncStorage.getItem('uname')
.then(uname => {
AsyncStorage.getItem(`${uname}.companyName`)
.then(company => {
if(company) {
AsyncStorage.getItem(`${uname}.${company}.permissions`)
.then(permissions => JSON.parse(permissions))
.then(permissions => {
dispatch({
type: INIT_PERMISSIONS,
payload: permissions
});
});
}
})
})
.catch(err => console.log('initPermissions error: ', err));
}
и действия компании:
export const saveChosenCompany = (username, company) => dispatch => {
AsyncStorage.multiSet([
[`${username}.companyID`, company.id],
[`${username}.companyName`, company.name]
])
.then(() => {
dispatch({
type: SAVED_COMPANY,
payload: company
})
})
.catch(err => {
console.log(err);
dispatch({
type: SAVED_COMPANY,
payload: {
id: null,
name: null
}
})
})
}
export const initCompany = (company) => dispatch => {
dispatch({
type: INIT_COMPANY,
payload: company
})
}
Я надеюсь, что кто-то может объяснить мне эту проблему и как ее решить.
я должен также упомянуть, что при входе в систему из метода рендеринга реквизиты прав доступа в конечном итоге получают то значение, которое должно быть, но состояние компонента не изменяется и компонент не обновляется.
Спасибо всем заранее за помощь.