#reactjs #class #state
#reactjs #класс #состояние
Вопрос:
class App extends Component {
constructor(props) {
super(props);
this.state = {
user: null,
userWorkSpecialIds: false,
};
}
isAuthorized = (user) => {
const { user } = this.state;
if (!user) return false;
else {
// check to see if user has special work permit id
this.hasWorkAccount(user);
return user.some((item) => user.email === item.id);
}
}
isLoaded = () => {
const { user } = this.state;
return user != null;
}
hasWorkAccount = () => {
getCustomerList(function(data) { // service gets users work place from firebase
const checkworkerSpecialIds = data.map((item) => {
return {
id: item.w_id,
name: item.w_name,
special_id: item.wspecial_id,
};
});
// checkworkerSpecialIds returns the user list of Ids correctly
console.log("checking for spacial_id : ", checkworkerSpecialIds);
// *** ERROR: ***
this.setState({ userWorkSpecialIds: !this.userWorkSpecialIds})
console.log("never reachs here when I have this.setState({}) ");
});
}
componentDidMount() {
const DataArray = [];
firebaseAppFirestore
.collection("users")
.get()
.then((snapshot) => {
snapshot.forEach((doc) => {
myDataArray.push({ id: doc.id, role: doc.role });
});
this.setState({ user: DataArray });
});
}
}
render() {
return (
<UserProvider>
<FirestoreProvider firebase={firebase}>
{this.isLoaded() ? (
this.isAuthorized(firebaseAppAuth.currentUser) ? (
<Router history={browserHistory}>
<Routes
users={this.state.users}
userWorkSpecialIds={this.state.userWorkSpecialIds} <----- Not updating after 1st render
/>
</Router>
) : (
<SignInView/>
)
) : (
<CircularProgress />
)}
</FirestoreProvider>
</UserProvider>
);
}
}
export default withFirebaseAuth({
firebaseAppAuth,
})(App);
Я застрял на *** ОШИБКА: ***, после того, как я получу checkworkerSpecialIds, должен
this.setState({userWorkSpecialIds: !this.userWorkSpecialIds}), запустить компонент и обновить userWorkSpecialIds .
Я хочу инициировать обновления userWorkSpecialIds состояния и обновить реквизиты
В настоящее время Routs props просто получает userWorkSpecialIds = false, никогда не обновляется.
Комментарии:
1. Это похоже на привязку
this
проблемы. попробуйте использовать функцию arrow2. @ShubhamVerma да, я обновил функции пользовательского массива, но не разрешает, не уверен, почему.
3. Разве это не должно ссылаться на состояние следующим образом:
this.setState({ userWorkSpecialIds: !this.state.userWorkSpecialIds})
4. Можете ли вы добавить полный код, который вы добавили?