Компонент класса React не обновляет состояние на маршрутизаторе

#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 проблемы. попробуйте использовать функцию arrow

2. @ShubhamVerma да, я обновил функции пользовательского массива, но не разрешает, не уверен, почему.

3. Разве это не должно ссылаться на состояние следующим образом: this.setState({ userWorkSpecialIds: !this.state.userWorkSpecialIds})

4. Можете ли вы добавить полный код, который вы добавили?