Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS状态意外更改_Javascript_Reactjs_Debugging - Fatal编程技术网

Javascript ReactJS状态意外更改

Javascript ReactJS状态意外更改,javascript,reactjs,debugging,Javascript,Reactjs,Debugging,我正在React中开发用户界面。 我目前面临一个问题,我真的不知道如何调试。 不知何故,组件的状态会意外更改。但是,我没有更改状态变量的代码 当按下一个按钮时会发生变异,但我实际上没有编写任何代码来修改这个状态变量。是否有办法做出反应,以查看谁/哪些职能部门对状态进行了更改?如何调试这种场景?您在问题中提到了“状态变量”,但问题中显示的唯一代码使用的是道具,而不是状态 道具由父元素控制,即使在创建组件后,父元素也可以更改道具。下面是一个例子: 类示例扩展了React.Component{ 建造

我正在React中开发用户界面。 我目前面临一个问题,我真的不知道如何调试。 不知何故,组件的状态会意外更改。但是,我没有更改状态变量的代码

当按下一个按钮时会发生变异,但我实际上没有编写任何代码来修改这个状态变量。是否有办法做出反应,以查看谁/哪些职能部门对状态进行了更改?如何调试这种场景?

您在问题中提到了“状态变量”,但问题中显示的唯一代码使用的是道具,而不是状态

道具由父元素控制,即使在创建组件后,父元素也可以更改道具。下面是一个例子:

类示例扩展了React.Component{
建造师(道具){
超级(道具);
console.log(“构造函数”);
}
render(){
控制台日志(“呈现”);
返回{this.props.childprop};
}
}
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
this.state={value:0};
}
componentDidMount(){
常量句柄=setInterval(()=>{
this.setState(({value})=>({value:value+1}));
}, 500);
this.cleanup=()=>{
间隙(手柄);
};
setTimeout(this.cleanup,2000);
}
组件将卸载(){
if(this.cleanup){
这个.cleanup();
}
}
render(){
const{value}=this.state;
返回;
}
}
render(,document.getElementById(“根”))


Ciao,如果
组件
正在接收道具更新,则拦截的一种方法是
组件WillReceiveProps()
函数(现在称为
不安全\u组件WillReceiveProps()
)。如果
组件
正在更改其状态,则拦截的方法是
组件willupdate()
函数(现在称为
不安全\u componentWillUpdate()
),尝试使用这些函数调试应用程序(可能会看到一些意外行为,有助于了解问题的原因).

欢迎来到堆栈溢出!请拿着(您有一个徽章!),四处看看,并通读,特别是我们无法帮助您修复我们看不到的代码。:-)请使用演示问题的工具更新您的问题,最好是使用堆栈片段(
[]
工具栏按钮)运行的工具。堆栈代码段支持React,包括JSX。旁注:您引用的代码行中没有状态变量,只有一个道具。请检查,它还支持显示当前状态以及更新时的状态。@Qurben感谢您的提示,我已经在使用它了,但是您知道是否有可能查看/跟踪导致状态更改的函数吗?我以为你只能用它来检查组件的当前状态。@Momo,这是可能的,但做起来有点困难。在profiler选项卡中,您可以启动分析会话,这将显示随着时间的推移会触发哪些更新。在“设置”中,还有一个选项可以显示导致更新的原因。很抱歉,我的代码具有误导性和混乱性,因此我将其删除。我理解道具和状态的概念,我的问题实际上是关于如何调试意外状态更改,而不知道此更改来自何处?@Momo-正如我在对问题的评论中所说,请用演示问题的方法更新您的问题,最好是使用堆栈片段(the
[]
工具栏按钮)。堆栈代码段支持React,包括JSX。组件的状态不会自动更改。如果您使用的是基于类的组件(如前面的代码示例所示),请查找对
setState
的调用,这应该是更改组件状态的唯一方法。如果你有什么东西打破了反应状态的基本规则(不要直接修改状态),那就很难找到了。看看你给了哪些东西进入你的州。不幸的是。我删除我的答案主要不是为了让评论可见。:-)这个问题目前的形式无法回答。@t.J.Crowder我在OP编辑之前看到了答案,按钮处理程序上有一个道具,所以我想道具,而不仅仅是组件状态。