bemdev
@bemdev

Ре-рендег компонента React?

Добрый день, помогите понять, как мне сделать, чтобы ререндерился компонент с новой ссылкой

const block = ({url}) => {
    const [loading, setLoading] = useState(true);
    const [data, setData]:any = useState();

    useEffect(() => {
        if (loading && url !== null) {
            axios.get(url, { responseType: 'blob' }).then(response => {
                setData(window.URL.createObjectURL(response.data));
                setLoading(false);
            });
        }
        return () => {};
    });

    return loading ? (
        <div
            style={{
                width: '100%',
                height: '160px',
                display: 'grid',
                alignItems: 'center',
                justifyContent: 'center'
            }}
        >
            <FontAwesomeIcon
                style={{ fontSize: 20 }}
                spin
                icon={faSpinner}
            />
        </div>
    ) : (
        <div style={{ width: '100%', height: 160 }}>
            <img
                style={{
                    objectFit: 'contain',
                    objectPosition: 'center',
                    maxWidth: '100%',
                    maxHeight: '100%'
                }}
                width="100%"
                height="auto"
                src={data}
            />
        </div>
    );
}


При первом старте все хорошо, но когда динамически изменяю пропсы props.url то уже почему то не меняется data - которая вроде setData на новую
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
@raury
loading всегда false после первого рендера => условие не выполняется => состояние не меняется => компонент не перерисовывается
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы