#javascript #reactjs #icons #use-state
Вопрос:
Я хочу использовать хук useState, чтобы изменить цвет значков реакции на синий на боковой панели при нажатии на один из них. Я попробовал это
const [changeColor, setChangeColor] = useState('blue');
а потом в ответ
<IconOuter onClick={() => setChangeColor(changeColor)}>
{item.icon}
Я хотел бы знать, что я делаю не так? Любая помощь была бы очень признательна. Спасибо.
При дальнейшем рассмотрении я стилизовал, используя стили компонентов, так что это мой css для значка. Похоже, что вокруг значков есть промежуток, который может быть проще стилизовать.
const IconOuter = styled.span`
background-color: white;
border-radius: 5px;
padding: 10px;
width: 44px;
height: 44px;
left: 8px;
top: 8px;
`;
Ответ №1:
При использовании useState
крючка вы создаете переменную и метод, переменная используется для хранения состояния, а метод-для изменения значения переменной. Начальное значение переменных получается из значения внутри useState
крючка, и вы можете изменить это значение, используя метод, который вы определили с useState
помощью крючка
Это основная форма крючка useState:
const [state, setState] = UseState(<initial state>)
Поэтому ваш код должен быть :
const [myColor, setmyColor] = useState('white'); //the color is currently white
<IconOuter onClick={() => setColor('blue')} />
const IconOuter = styled.span`
background-color: ${ myColor };
border-radius: 5px;
padding: 10px;
width: 44px;
height: 44px;
left: 8px;
top: 8px;
`;
Комментарии:
1. Привет, спасибо, что вернулись. Я только что попробовал это, но, похоже, это не работает. Это то, что я сделал
const [changeColor, setChangeColor] = useState('white');
, и это мое возвращениеreturn ( <> <SidebarLink to={item.path} onClick={showSubnav}> <IconOuter onClick={() => setChangeColor('blue')}> {item.icon} </IconOuter> </SidebarLink> </> ); };
, может быть, потому, что у меня уже есть onclick выше?2. @Mahier кодовое поле было бы более полезным.
Ответ №2:
Я вижу, что значение по умолчанию для этого состояния-синий, и в вашем коде вы просто вызываете setChangeColor и снова передаете «синий», поэтому, если вы нажмете на него снова и снова, все равно состояние будет синим, так как вы просто передаете «синий» в свой метод состояния changeColor(setChangeColor()). Поэтому я просто вижу, что состояние все время получает то же значение, что и значение по умолчанию. Вы не поместили остальную часть кода, но в этом небольшом фрагменте кода, которым вы поделились здесь, я вижу, что вы нигде не используете это значение состояния.
Ответ №3:
Вы можете попробовать встроенный CSS как
<IconOuter onClick={()=>setChangeColor('blue')} style={{color:changeColor}}/>
Если вам нужен стиль компонента, попробуйте использовать color
его вместо background-color
CSS.