Size: a a a

2020 May 05

AM

Aga Mahmudov in Frontend_ru
Igor N
То есть, card у тебя внутри компонента. Покажи в песочнице логику всю
В песочнице сложно будет, попробую описать здесь

Component {
   render {
       <Swiper  renderCard={(card, index) => this.renderCard({ card, index, dislikeOpacity: this.state.dislikeOpacity })} />
   }

   renderCard(props) {
   return { … }
   }
}
источник

IH

Ilya Human in Frontend_ru
Сама проблема не очень ясна просто
источник

AM

Aga Mahmudov in Frontend_ru
Ilya Human
Я не видел твоей логики, но попробуй обновлять через setState(prevState => return {newState})
this.setState(prevState => ({ cardSwipeable: true, dislikeOpacity: 1 }))
источник

AM

Aga Mahmudov in Frontend_ru
Ilya Human
Сама проблема не очень ясна просто
Есть либа Swiper, который генерирует по шаблону фукнции renderCard() компоненты, как карты. Нужно через 5 секунд просмотра ролика, “активировать” кнопку внутри функции renderCard(), сменив dislikeOpacity с 0.5 на 1. Как только плеер насчитывает 5 секунд, срабатывает
       
this.setState(prevState => ({ cardSwipeable: true, dislikeOpacity: 1 }))

И в теории, к кнопке должен применится opacity 1, но нифига
источник

AM

Aga Mahmudov in Frontend_ru
По факту setState отрабатывает, но renderCard() рендерится только один раз и никак не реагирует на апдейт стейта
источник

AM

Aga Mahmudov in Frontend_ru
PS всё это происходит в рамках одного компонента
источник

IH

Ilya Human in Frontend_ru
Значит что-то где-то не так
источник

AM

Aga Mahmudov in Frontend_ru
это мы поняли :))
источник

IH

Ilya Human in Frontend_ru
Тем более если нет никаких асинхронных действий. Проблема просто в апдейте стейта а это база логики реакта
источник

IH

Ilya Human in Frontend_ru
Реально сложно сказать без кода в сандбоксе
источник

AM

Aga Mahmudov in Frontend_ru
Ilya Human
Реально сложно сказать без кода в сандбоксе
сейчас попробую
источник

IN

Igor N in Frontend_ru
Aga Mahmudov
В песочнице сложно будет, попробую описать здесь

Component {
   render {
       <Swiper  renderCard={(card, index) => this.renderCard({ card, index, dislikeOpacity: this.state.dislikeOpacity })} />
   }

   renderCard(props) {
   return { … }
   }
}
Погоди, вот тут непонятно. У тебя в рендере renderCard(props)?
источник

AM

Aga Mahmudov in Frontend_ru
Igor N
Погоди, вот тут непонятно. У тебя в рендере renderCard(props)?
Он рядом с рендером, не внутри. Просто как обычная функция, которая возвращает темплейт
источник

IN

Igor N in Frontend_ru
Ну так сделай опасити: зис.стейт.опасити
источник

AM

Aga Mahmudov in Frontend_ru
Igor N
Ну так сделай опасити: зис.стейт.опасити
Сделал, но он не реагирует. Сейчас почти закончил санбокс пилить
источник

AM

Aga Mahmudov in Frontend_ru
источник

AM

Aga Mahmudov in Frontend_ru
Немного не так как у меня, но в целом логика та же. Через две секунды таймаута в componentDidMount меняется стейт, renderCard забивает хер. Но есть одно но, если хоть как-то изменить размер экрана, то сразу сработает ререндер и появится 1
источник

AM

Aga Mahmudov in Frontend_ru
В целом ещё раз глянул, идеально отображает проблему
источник

IN

Igor N in Frontend_ru
падажжи. во-первых, зачем тебе опесити менять в js, когда это, вроде, могут keyFrames?
источник

IH

Ilya Human in Frontend_ru
Так смотри, у тебя создался парент с dislikeOpacity, далее ты рендеришь чайлд и передаешь в него ЭТОТ dislikeOpacity (0.5), хотя setTimeout уже запустился
источник