#reactjs #font-awesome #use-state
Вопрос:
Я пытаюсь изменить значок, нажав на значок. Значение isOpen изменяется на консоли, но значок не меняется.
const [isOpen, setIsOpen] = useState(false);
<header className="w-full h-20 shadow-sm">
<div className="h-full sm:mx-6 md:mx-12 lg:mx-24 xl:mx-48 px-4 xl:px-0">
<nav className="h-full flex justify-between items-center text-lg">
<div className="flex items-center">
<p className="font-bold text-blue z-10">Shaddam</p>
<figure className="-ml-4 z-0">
<img src={BrandIconBg} alt="Blob" />
</figure>
</div>
<span
className="text-blue text-2xl cursor-pointer"
onClick={() => setIsOpen(!isOpen)}
>
<i className={!isOpen ? "fas fa-bars" : "fas fa-times"}></i>
</span>
</nav>
</div>
</header>
Комментарии:
1. Можете ли вы отправить кодовое поле, пожалуйста. Потому что проблема определенно не в той части кода, которую вы отправили.
2. Лучше изменить код, зависит от состояния «isOpen», затем отобразить соответствующий значок с определенным именем класса
3. вот код и коробка codesandbox.io/embed/…
4. idk, почему на codesandbox работает, но на локальном развитии не работает
5. Да. Технически у вас там нет никаких проблем, так что это должно сработать.
Ответ №1:
Попробуйте немного изменить свою логику. Причина этой проблемы в том, что значок не отображается, потому что ваша локальная среда разработки или браузер не отображают новый значок, когда ваши изменения вступают в силу.
const [isOpen, setIsOpen] = useState(false);
<header className="w-full h-20 shadow-sm">
<div className="h-full sm:mx-6 md:mx-12 lg:mx-24 xl:mx-48 px-4 xl:px-0">
<nav className="h-full flex justify-between items-center text-lg">
<div className="flex items-center">
<p className="font-bold text-blue z-10">Shaddam</p>
<figure className="-ml-4 z-0">
<img src={BrandIconBg} alt="Blob" />
</figure>
</div>
<span
className="text-blue text-2xl cursor-pointer"
onClick={() => setIsOpen(!isOpen)}
>
{isOpen ?
<i className="fas fa-bars"></i> :
<i className="fas fa-times"></i>}
</span>
</nav>
</div>
</header>
Вот пример рабочей площадки.
Комментарии:
1. это все еще не работает, вот мое репо github.com/shaddamalghafiqih/PersonalWebsite может быть, вам это нужно, этот код от src/parts/Header.js
2. Это работает. Может быть, у вас есть еще одна проблема, связанная с этим. Вот пример: codesandbox.io/s/fontawesome-5-playground-forked-wtz9e
Ответ №2:
исправлено, это потому, что я использую cdn fontawesome вместо пакета npm, когда я переключаюсь на пакет npm для fontawesome, он работает
Комментарии:
1. этот ответ был помечен как некачественный, пожалуйста, улучшите ответ с дополнительной информацией и объяснением