Как использовать BehaviorSubject в приложении React

Если кто-то приходит сюда из-за ошибки java.lang.NoClassDefFoundError: org/apache/log4j/Logger, в моем случае он был создан, потому что я использовал log4j 2 (но я не добавлял все файлы, которые поставляются вместе с ним), а также некоторая библиотека зависимостей log4j 1. решение заключалось в том, чтобы добавить мост Log4j 1.x: jar log4j-1.2-api-.jar, который поставляется с log4j 2. Дополнительная информация в log4j 2 migration .

0
задан user1233092 16 January 2019 в 17:51
поделиться

1 ответ

Вы можете сделать это на самом компоненте или на его родительском элементе и передать ему значение в качестве реквизита.

Просто подпишитесь на наблюдаемое в событии 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
   ...
}
0
ответ дан Alykam Burdzaki 16 January 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: