@ms-config

Почему react не показывает новый массив?

import { Component } from "react";
import getCharacters from "../getCharacters/getCharacters";
import OneCharacter from "../oneCharacter/oneCharacter";
import Button from "../button/button";
import rightArrow from '../../imgs/right-arrow.png';
import leftArrow from '../../imgs/left-arrow.png';
import './carousel.scss';


function composeCharacters(offset) {
    let arr = [];
    for (let i = 1; i <= 4; i++) {
        arr.push(<OneCharacter offset={offset + i} />);
    }
    return arr;
}


class Carousel extends Component {

    state = {
        offset: 4,
    }
    plusChars = () => {
            this.setState(({offset}) => ({
                offset: offset + 1
            }))
    }
    minusChars = () => {
        if (this.state.offset === 0) {
            return;
        }
        this.setState( ({offset}) => ({
            offset: offset - 1
        }))
    }
    onUpdate = () => {
        this.setState(({ offset }) => ({
            offset: offset + 4,
        }))
        console.log(this.state.persons);
    }
    render() {
        let arr = [...composeCharacters(this.state.offset)];
        console.log(arr);
        return (
            <section className="carousel">
                <div className="carousel__wrapper">
                    <div className="carousel__inner">
                        {arr}
                    </div>
                    <div className="carousel__buttons">
                        <div className="carousel__leftA" onClick={this.minusChars}><img src={leftArrow} alt="left arrow" /></div>
                        <div className="carousel__rightA" onClick={t<code lang="javascript">

</code>his.plusChars}><img src={rightArrow} alt="right arrow" /></div>
                    </div>
                </div>
                <Button name={'Add Hero'} onClick={this.onUpdate} />

            </section>
        )



    }

}
export default Carousel;


// Первые четыре элемента показывает нормально, а при нажатии на стрелки меняется offset и arr в render, но на экране всегда только первые четыре элемента. В массиве arr(render) тоже все меняется, я получаю другие элементы с сервера.
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@ms-config Автор вопроса
Все нашел я просто добавил key в функцию
function composeCharacters(offset) {
    let arr = [];
    for (let i = 1; i <= 4; i++) {
        arr.push(<OneCharacter offset={offset + i} key={offset+i} />);
    }
    return arr;
}

И все заработало, видимо react не понимал какие объекты изменились
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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