Я в настоящее время нахожусь в проекте, который использует React-native для мобильных устройств, React в Интернете и MobX для создания приложения, использующего WebRTC для предоставления пользователям возможности общаться через видеочат.
Проблема, с которой я сталкиваюсь, заключается в том, что рендеринг React не запускается изменениями RTCPeerConnection, такими как iceConnectionState, signalingState и изменения удаленного потока.
Кажется, что MobX работает не так, как описано, при использовании "нативной сущности", такой как RTCPeerConnection. Даже при том, что мы намеревались отслеживать свойства способом MobX, чтобы быть в курсе изменений свойств.
RoomStore:
import { observable } from 'mobx';
import { RTCPeerConnection, RTCMediaStream } from 'react-native-webrtc';
class RoomStore {
@observable userMediaStream: RTCMediaStream;
@observable peerConnection: RTCPeerConnection;
}
export default RoomStore;
Метод визуализации компонента:
render() {
const { roomStore } = this.props;
const peerConnection = roomStore.peerConnection;
const iceConnectionState = peerConnection.iceConnectionState;
if (peerConnection.getRemoteStreams().length > 0 && iceConnectionState === 'completed') {
// display remote stream
} else {
// display connecting state
}
}
Мне удалось найти обходной путь, который прослушивает oniceconnectionstate, onsignalingstate, onaddstream и сохраняет существующие значения состояния peerconnection, потоки отдельно в самом хранилище, но он избыточен и не является чистым для дублирования уже существующего состояние только для того, чтобы библиотека работала. Также, когда я работаю над проектом, это создает дополнительную нежелательную сложность в наиболее чувствительной части приложения.
Мой вопрос заключается в том, возможно ли просто сохранить один наблюдаемый RTCPeerConnection и писать чистый, менее подверженный ошибкам код с помощью MobX?