Как из родителя менять стиль для одного из элементов стороннего компонента?
У меня есть библиотека стороннего разработчика, которая отдает компонент Table, состоящий из нескольких элементов.
Высота одного из внутренних элементов, назовем его <div class='toChange'> из Table меня не устраивает. Я ее хочу задавать динамически из this.state.height.
Можно ли как-то из родительского компонента MyComponent динамически менять высоту у <div class='toChange'>?
import { Table } from "someLibrary";
export default class MyComponent extends Component {
...
render() {
const y = this.state.height
return <div>
<Table />
</div>
}
}
Ответы (1 шт):
Можно в несколько способов
- Ребенок должен "ловить"
styleи присваивать их на правильную DOM ветку - Ребенок должен "ловить"
classNameи где-то должен бытьcss,sass,scssфайл который будет импортироваться со стилями для заданного класса - Можно использовать
styled-componentsкоторые хорошо работают с переданнымclassNameи в конечном результате комбинируют переданный класс с тем который они генерируют
Все три примера есть по ссылки ниже
Ссылка на пример на codesandbox
Примечание: если автор библиотеки не принимает style или className пропс, то у шансы на изменения стиля элемента у вас очень низки. Чтобы узнать точно вам нужно пойти в исходный код этой компоненты и посмотреть какие пропсы она принимает
UPDATE
class MyComponent {
state = {
height: 0,
}
setHeight = (height) => {
this.setState({ height }, () => {
// функция вызовется после обновления состояния
// ловим DOM ветку где надо изменить стили
const element = document.querySelector('targetClassName');
// меняем стили только если она существует в DOM структуре
if (element) element.style.height = `${height}px`;
})
}
render() { ... }
}