Я пытаюсь написать собственный компонент камеры внутри моего компонента ReactJS, потому что я не могу найти библиотеку npm, которая действительно соответствует моим требованиям.Так что я нашел эту статью https://frontendnews.io/editions/2018-08-15-simple-camera-component, которая дает довольно хорошие детали.Но я думаю, что у меня проблемы с превращением этого чистого кода JavaScript в компонент React.Я не могу рендерить компонент Camera внутри моей страницы.Пожалуйста, посмотрите на мой код и посмотрите, что я сделал не так.
Вот мой компонент Camera:
import {Component} from 'react'
class Camera extends Component {
connectedCallback() {
const shadow = this.attachShadow({ mode: 'open' });
this.videoElement = document.createElement('video');
this.canvasElement = document.createElemnt('canvas');
this.videoElement.setAttribute('playsinline', true);
this.canvasElement.style.display = 'none';
shadow.appendChild(this.videoElement);
shadow.appendChild(this.canvasElement);
}
open(constraints) {
return navigator.mediaDevices.getUserMedia(constraints)
.then((mediaStream) => {
// Assign the MediaStream!
this.videoElement.srcObject = mediaStream;
// Play the stream when loaded!
this.videoElement.onloadedmetadata = (e) => {
this.videoElement.play();
};
});
}
}
export default Camera
Вот мой cam.js, где я рендерил компонент камеры:
import React, { Component } from 'react';
import Camera from '../elements/camera';
import ElemLayout from '../elements/layout';
class App extends Component {
constructor(props){
super(props)
this.state = {
isLoading: true
}
}
componentDidMount(){
this.setState({ isLoading: false })
}
async function() {
const camera = document.querySelector('Camera');
camera != null && await camera.open({ video: { facingMode: 'user' }})
}
render () {
return (
<ElemLayout routes={ this.props.routes } isLoading={this.state.isLoading} >
<Camera />
</ElemLayout>
);
}
}
export default App;