<?php
$letra1 = chr(rand(65,90));
$letra2 = chr(rand(97,122));
$letra3 = chr(rand(65,90));
$letra4 = chr(rand(97,122));
$letras = $letra1 . $letra2 . $letra3 . $letra4;
mkdir("a/$letras", 0777, true); //third parameter is important if you want to add perms recursively
$archt = fopen("a/".$letras."/text.txt", "w")or die(print_r(error_get_last(),true));
$txt = "";
fclose($archt);
?>
时我的组件this.props.save();
?但是,如果我将页面留在另一个标签中的外部链接,则不会触发componentWillUnmount
我的组件
componentWillUnmount
我的链接看起来像这样
export default class AutoSave extends React.Component {
constructor(props) {
super(props);
this.setIntervalId = null;
}
componentDidMount() {
if (!window.onbeforeunload) {
window.onbeforeunload = () => {
this.props.save();
};
}
this.setIntervalId = setInterval(() => this.props.save(), this.props.intervalInMs);
}
componentWillUnmount() {
this.props.save();
clearInterval(this.setIntervalId);
}
render() {
return <span className="saving">Last saved at {now()}</span>;
}
}
如何在用户点击链接时进行组件保存?这是一个react / redux应用程序。
答案 0 :(得分:2)
为什么你在一个延伸自&#34; React.Component&#34;的课程中做某种工作。在ReactJS中,Component不适合做那样的工作。从官方文档&#34;组件中,您可以将UI拆分为独立的,可重复使用的部分,并单独考虑每个部分。&#34;除了与ui相关的范围外,组件中没有任何部分。无论如何,您应该将AutoSave创建为纯组件并在所有React组件中使用它。 :
export default class AutoSave
{
constructor(saveFn, intervalInMs) {
this.saveFn = saveFn;
this.setIntervalId = setInterval(
() => {
this.save();
},
intervalInMs
);
}
unmount() {
this.save();
clearInterval(this.setIntervalId);
}
save() {
this.saveFn();
this.callOnSaveCallback();
}
onSave(callback) {
this.onSaveCallback = callback;
}
// private method that calls onSaveCallback
callOnSaveCallback() {
if(this.onSaveCallback != null)
this.onSaveCallback();
}
}
并在我的React组件中使用它:
import AutoSave from './AutoSave';
export default class ReactComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
// ... other properties
"lastSave": new Date()
}
this.save = this.save.bind(this);
this.autoSave = new AutoSave(this.save, 100);
this.autoSave.onSave(
() => {
this.setState(
{
"lastSave": new Date()
}
);
}
)
}
componentWillUnmount() {
this.autoSave.unmount();
this.autoSave = null;
}
onClick() {
this.autoSave.save();
}
save() {
// some saving job
}
render() {
return (
<div>
// ... other components
<Link href="http://www.google.com" target="_blank" onClick={this.onClick.bind(this)}>
Google Link
</Link>
<span className="saving">Last saved at {this.state.lastSave}</span>
</div>
);
}
}
答案 1 :(得分:1)
打开新标签页不会触发componentWillUnmount()或onbeforeunload。在这两种情况下,因为您的应用仍然在原始标签中打开。在您关闭或离开页面之前,React不会立即卸载组件,因此即使页面要关闭,componentWillUnmount()也不会执行任何操作。 onbeforeunload仅在您从同一选项卡中的页面导航时触发,或者关闭选项卡/窗口。
如果你想在每次用户点击你的按钮时可靠地调用this.props.save(),那么只需在按钮上添加一个onClick处理程序。
input_seq = np.array([[[0.725323664],
[0.7671179],
[0.805884672]]])