Почему состояние обновляется позже заданного ему параметра?

Я передаю из Items.jsx в App.jsx id элемента, на который нажал пользователь.
Проблема состоит в том, что состояние обновляется с опозданием, когда я нажму уже на другой айтем.
Например: нажатие на 1 : значение state: -1(дефолтное), нажал на 4: state: 1(передался 1 id)
5a3e4dfa19da0442274907.pngItems.jsx:
handleActiveItemId(itemId){
        console.log("Item id in Items.jsx: " +itemId);
        this.props.onSelectItemCallback(itemId);
      }

App.jsx:
Состояние:
this.state ={
            activeItemId: -1
        };

Функция:
selectItem(itemId){
        console.log("Item ID " + itemId);
        this.setState({activeItemId: itemId});
        console.log("State: " + this.state.activeItemId);
    }

Рендер:
render(){
        const { activeItemId } = this.state;    
        const activeItem = items.reduce(item => item.id === activeItemId);
        return (
            <main>
                <Nav/>
                    <div className="content">
                    <Route exact path="/" component={Home} />
                    <Route exact path="/about" component={About}/>
                    <Route exact path="/shop" render={()=> <Items items={items} onSelectItemCallback={this.selectItem} />}/>
                    <Route exact path="/contact" component={Contact} />
                    <Route path="/more" render={()=><More items={items} activeItem={activeItem}/> }/>
                    <Footer/>
                </div>
            </main>
        );
    }
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
selectItem(itemId){
        console.log("Item ID " + itemId);
        this.setState({activeItemId: itemId},()=>{console.log("State: " + this.state.activeItemId)});
        
    }

setState ассинхронна
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект