Если кто-то приходит сюда из-за ошибки java.lang.NoClassDefFoundError: org/apache/log4j/Logger
, в моем случае он был создан, потому что я использовал log4j 2 (но я не добавлял все файлы, которые поставляются вместе с ним), а также некоторая библиотека зависимостей log4j 1. решение заключалось в том, чтобы добавить мост Log4j 1.x: jar log4j-1.2-api-
, который поставляется с log4j 2. Дополнительная информация в log4j 2 migration .
Вы можете сделать это на самом компоненте или на его родительском элементе и передать ему значение в качестве реквизита.
Просто подпишитесь на наблюдаемое в событии componentDidMount :
componentDidMount() {
window.opener.app.varCollection$.subscribe(val => this.setState({value:val}))
}
Хорошей практикой является обработка отмены подписки на событие componentWillUnmount с использованием оператора takeUntil и предмет:
unmount$ = new Subject() //component class property
componentDidMount() {
//if using rxjs 6:
window.opener.app.varCollection$
.pipe(takeUntil(this.unmount$))
.subscribe(val => this.setState({value:val}))
//if using rxjs 4 or 5:
window.opener.app.varCollection$
.takeUntil(this.unmount$)
.subscribe(val => this.setState({value:val}))
}
componentWillUnmount() {
this.unmount$.next(true)
}
render() {
const {value} = this.state //now you have the value on the render funtion
...
}