У меня есть этот функциональный компонент для рендеринга диапазона в виде полосы. Когда я визуализирую компонент, я передаю свойство scrolled
как false
. Затем jQuery обновляет атрибут до true
, когда я прокручиваю 150 пикселей. Я знаю, что использовать jQuery не рекомендуется, и я перехожу с него. На данный момент я хочу, чтобы это работало, поскольку я все еще изучаю функциональные компоненты.
export default function Button(props) {
const [scrolled, setScrolled] = useState( props.scrolled );
useEffect(() => {
setScrolled(props.scrolled);
}, [scrolled]);
return (
<HamburgerButton scrolled={scrolled}>
<p>{scrolled}</p>
<span></span>
</HamburgerButton>
);
}
И это стилизованное определение компонента:
const HamburgerButton = styled.div`
...
span {
background: ${props => props.scrolled === 'false' ? props.theme.white : props.theme.black};
}
...
`;
Когда я прокручиваю, я вижу, что атрибут scrolled
в DOM изменился с «false» на «true», но интервалы остаются белыми. Кроме того, тег абзаца с {scrolled}
не меняется с false
.
===
, но сравниваете логическое значение со строкой, поэтому они никогда не будут равны. Должно быть простоprops.scrolled === false
- person Jayce444   schedule 11.01.2020scrolled
. Похоже, что когда jQuery изменяет атрибут, он преобразует логическое значение в строку. - person Casey   schedule 11.01.2020!props.scrolled || props.scrolled === 'false' ? props.theme.white : props.theme.black
? Охватить оба сценария - person James   schedule 11.01.2020background: ${props => !props.scrolled || props.scrolled === false ? props.theme.white : props.theme.black};
, но он по-прежнему не обновляет цвет, когдаscrolled="true"
применяется в качестве атрибута к компоненту. - person Casey   schedule 11.01.2020props.scrolled
прямо вHamburgerButton
. Все, что вы сделали, это сохранили начальное значениеprops.scrolled
в состоянии, обновили его тем же значением при первом вызове эффекта, и больше ничего не меняет значениеscrolled
для повторного запуска эффекта. - person Drew Reese   schedule 11.01.2020