【发布时间】:2017-05-12 16:33:07
【问题描述】:
我的反应组件中有这段代码:
componentDidMount() {
this.setState({
audioContainer: document.getElementById('audio'),
});
}
并且在需要时我会执行一些操作:
this.state.audioContainer.start()
我认为这不是最好的选择。
按照上面的解决方案,我这样做了:
从“反应”导入反应; 从 'prop-types' 导入 PropTypes;
class AudioControl extends React.Component {
componentDidMount() {
if (this.props.start) {
this.start();
}
}
componentWillReceiveProps({ start }) {
if (start !== this.props.start && start === true) {
this.start();
}
}
start() {
this._audio.start();
}
render() {
return (
<audio ref={a => this._audio = a}>
<source src="url" type="audio/mp3" />
</audio>
);
}
}
AudioControl.defaultProps = {
start: false,
};
AudioControl.propTypes = {
start: PropTypes.bool,
};
export default AudioControl;
我在父组件处导入:
<AudioControl start />
我得到了这个错误: 动态页面加载失败 TypeError: this._audio.start is not a function
【问题讨论】:
-
问题应该是为什么它首先处于状态。有必要吗?
-
是的,我想知道渲染时是否有类似 的东西
-
您可以将 REF 用于您的音频组件(在 render() 方法中),然后您可以以适当的反应方式控制它。如果你能展示更多代码,你的整个组件,尤其是你如何渲染那个音频组件,那么我可能会给你一些更清晰的例子,谢谢
标签: reactjs