Javascript 多次触发react事件处理程序中的错误
若react事件处理程序中发生错误(在本例中为onChange),它将在控制台中显示两次。对吗?也许我做错了什么Javascript 多次触发react事件处理程序中的错误,javascript,reactjs,Javascript,Reactjs,若react事件处理程序中发生错误(在本例中为onChange),它将在控制台中显示两次。对吗?也许我做错了什么 onChange处理程序只调用一次 我将在我的页面上设置监视,不希望出现重复的错误 在react v16中测试 从“React”导入React; 从'react dom'导入{render}; 从“./Hello”导入Hello; 类应用程序扩展了React.Component{ 建造师(道具){ 超级(道具); this.state={text:'}; } onChange(事件
onChange
处理程序只调用一次
我将在我的页面上设置监视,不希望出现重复的错误
在react v16中测试
从“React”导入React;
从'react dom'导入{render};
从“./Hello”导入Hello;
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
this.state={text:'};
}
onChange(事件){
log('callunknown function once');
//!!!
什么();
这是我的国家({
文本:event.target.value
});
}
render(){
const{text}=this.state;
返回(
开始编辑以查看发生的奇迹{'\u2728'}
);
}
}
渲染(
但在Safari中,错误如下所示:
此行为是有意为之,此处对此进行了解释和讨论:
以下是丹·阿布拉莫夫的解释:
就上下文而言,它发生的原因是因为我们故意让
浏览器在重新浏览之前将错误解释为未捕获
理由在#10474中讨论
如果您遵循错误中的建议并添加错误边界(其中
你应该!),你只会看到一次错误,所以这不是一个很大的问题
日常工作流程中的问题。事实上,它会促使人们添加错误
这很好
另一个理由是,如果你不小心吞下了
错误我们仍然打印一次。这就值得了。
我们收到了数百条评论和几十个由人引起的问题
吞下自己的错误,事实上我们会在
至少一次现在看来已经足够弥补印刷带来的好处了
当它们未被破坏、未被吞食且没有食物时,它们会出现两次
边界
此行为是有意为之,本文对此进行了解释和讨论:
以下是丹·阿布拉莫夫的解释:
就上下文而言,它发生的原因是因为我们故意让
浏览器在重新浏览之前将错误解释为未捕获
理由在#10474中讨论
如果您遵循错误中的建议并添加错误边界(其中
你应该!),你只会看到一次错误,所以这不是一个很大的问题
日常工作流程中的问题。事实上,它会促使人们添加错误
这很好
另一个理由是,如果你不小心吞下了
错误我们仍然打印一次。这就值得了。
我们收到了数百条评论和几十个由人引起的问题
吞下自己的错误,事实上我们会在
至少一次现在看来已经足够弥补印刷带来的好处了
当它们未被破坏、未被吞食且没有食物时,它们会出现两次
边界
注意你是如何从两个不同的文件中得到相同的异常的?我相信它只触发了一次,但是你在两个不同的文件位置看到了两个相同类型的异常。注意你是如何从两个不同的文件中得到相同的异常的?我相信它只触发了一次,但是你在两个不同的文件中看到了两个相同类型的异常不同的文件位置。
import React from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
class App extends React.Component {
constructor(props){
super(props);
this.state = { text: '' };
}
onChange(event){
console.log('Call unknown function once');
//!!!
what();
this.setState({
text: event.target.value
});
}
render(){
const {text} = this.state;
return (
<div>
<Hello name="CodeSandbox" />
<h2>Start editing to see some magic happen {'\u2728'}</h2>
<input type="text" value={text} onChange={this.onChange.bind(this)}/>
</div>
);
}
}
render(<App />, document.getElementById('root'));