#reactjs #tabs #antd
#reactjs #вкладки #antd
Вопрос:
Я пытаюсь изменить цвет фона для активной вкладки с вкладок AntD, я могу добиться этого с меньшим количеством файлов, ориентируясь:
.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
color: blue;
}
так что это не проблема, моя проблема в том, что мне нужно изменить цвет фона активной вкладки на основе условия javascript, и я не уверен, как настроить таргетинг на активную вкладку с помощью javascript и без css / less.
Есть идеи, как я могу этого добиться?
Ответ №1:
Вы можете получить элемент, используя функцию querySelector(https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector ).
const Demo = () => {
function callback(key) {
updateTabBackground();
}
useEffect(()=> {
updateTabBackground();
}, []);
const updateTabBackground = () => {
const tab = document.querySelector('[role="tab"][aria-selected="true"]');
console.log(tab)
if(tab) {
tab.style.background = 'red';
}
}
return (
<Tabs defaultActiveKey="1" onChange={callback}>
<TabPane tab="Tab 1" key="1">
Content of Tab Pane 1
</TabPane>
<TabPane tab="Tab 2" key="2">
Content of Tab Pane 2
</TabPane>
<TabPane tab="Tab 3" key="3">
Content of Tab Pane 3
</TabPane>
</Tabs>)
};
Комментарии:
1. Спасибо за ваш ответ, я пытался последовать вашему примеру, но кажется, что постоянная вкладка равна нулю (I консоль. вкладка журнала, и я получил null).
2. Где вы тестируете этот пример?
3. Еще раз спасибо, это работает не так, как должно, оно изменяет цвет фона содержимого вкладки, а не всей вкладки, а также изменяет ранее выбранную вкладку, а не текущую, я привел пример в code sendbox: codesandbox.io/s/priceless-northcutt-nibhq?file=/src/App.js
4. Я обновил код здесь codesandbox.io/s/compassionate-frost-i6k07?file=/src/App.js
5. Просто добавьте TabItem.classList.add(data[i].срочно amp;amp; «ant-tab-срочно»); внутри цикла for, codesandbox.io/s/elated-pond-0lkwf?file=/src/App.js
Ответ №2:
Если вы действительно не хотите использовать css / less, вы можете просто использовать встроенные стили:
let style = {};
if (condition) style.color = 'red';
return <Component style={style} />
Но вы также можете сделать это (на мой взгляд, немного более чисто), добавив класс на основе условия в JavaScript и обработав стиль в css / less:
let class;
if (condition) class = 'specialClass';
return <Component className={class} />
Комментарии:
1. Спасибо за ваш ответ, я знаю об этом подходе, но я все еще не уверен, как настроить таргетинг на активную вкладку только с помощью JS, поэтому в вашем примере вы настраиваете таргетинг на компонент, но мне нужно настроить таргетинг на активную вкладку.
Ответ №3:
Вы также можете попробовать использовать некоторую переменную css для обновления активного цвета из кода js.
const element = document.documentElement;
if (element) {
element.style.setProperty('--active_tab_color', 'red'); // Use Dynamic color variable here.
}
а затем перейдите в свой файл css и используйте там эту переменную.
.ant-tabs .ant-tabs-nav-list .ant-tabs-ink-bar {
background-color: var(--active_tab_color);
}