【发布时间】:2016-08-17 19:33:57
【问题描述】:
考虑以下简单的 React 组件,它显示一个 YouTube 视频并有一个更改视频的按钮:
import React from 'react';
import ReactDOM from 'react-dom';
class Video extends React.Component {
state = { video: 'G8KpPw303PY' };
handleClickButton = event => {
this.setState({ video: 'PHAc3_MEjgQ' });
};
render() {
return (
<div>
<iframe
src={`https://www.youtube.com/embed/${this.state.video}?autoplay=1`}
/>
<input
type="button"
value="Change Video"
onClick={this.handleClickButton}
/>
</div>
);
}
}
ReactDOM.render(<Video />, document.getElementById('react-root'));
如果我点击按钮,视频会发生变化(应该如此)。但是,浏览器历史记录中也会添加一个页面。如何使页面不添加到浏览器历史记录中?
我知道要在原生 JavaScript 中的 iframe 中加载新 URL,我们会使用 iframe.contentWindow.location.replace('url')。不过,由于 React 的声明性/功能性,做这样的事情看起来真的很老套,我知道需要对这样的事情提供内置支持。
【问题讨论】:
-
你能解释一下“页面被添加到浏览器历史记录”是什么意思吗?它会影响前进/后退按钮吗?或者仅仅是浏览器知道它已经存在的问题(例如,如果您转到 about:history,它可能会被列出)?后者似乎是一个我想不出绕过的好理由的功能。如果您解释为什么这是一个问题,它也可能有助于我们提出替代解决方案。
标签: javascript html iframe reactjs