Как изменить состояние при клике?

При первом клике состояние не изменяется,только при следующий.Подскажите,что не так?
state = {
    images: [],
    isLoading: false,
    error: null,
    query: '',
    page: 1,
    isModalOpen: false,
    modalImage: '',
    inputValue: '',
  };
loadMore = () => {
    this.setState(state => ({
      page: state.page + 1,
    }));

    const { query, page } = this.state;
    window.scrollTo({
      top: document.documentElement.scrollHeight,
      behavior: 'smooth',
    });
    fetchImg(query, page).then(response =>
      this.setState(state => ({
        images: [...state.images, ...mapper(response.data.hits)],
      })),
    );
  };

 render() {
    const {
      images,
      error,
      isModalOpen,
      modalImage,
      isLoading,
      inputValue,
    } = this.state;
    return (
      <section className={styles.App}>
        {error && <ErrorNotification text={error.message} />}
        <Searchbar
          onChange={this.handleChange}
          onSubmit={this.handleSubmit}
          value={inputValue}
        />
        {isLoading && <ImageLoader />}
        {images.length > 0 && (
          <ImageGallery
            images={images}
            onClick={this.loadMore}
            onClickModal={this.openModal}
          />
        )}
        {isModalOpen && (
          <Modal link={modalImage} closeModal={this.closeModal} />
        )}
      </section>
    );
  }
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
ktim8168
@ktim8168
Frontend Developer
Попробуй с callback-ом
loadMore = () => {
    this.setState(
      (prevState) => ({
        page: prevState.page + 1,
      }),
      () => {
        const {query, page} = this.state;
        window.scrollTo({
          top: document.documentElement.scrollHeight,
          behavior: 'smooth',
        });
        fetchImg(query, page).then((response) =>
          this.setState((state) => ({
            images: [...state.images, ...mapper(response.data.hits)],
          }))
        );
      }
    );
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы