Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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 是什么原因引起的;RangeError:超过最大调用堆栈大小;在我的代码里?_Javascript_React Native_React Native Android - Fatal编程技术网

Javascript 是什么原因引起的;RangeError:超过最大调用堆栈大小;在我的代码里?

Javascript 是什么原因引起的;RangeError:超过最大调用堆栈大小;在我的代码里?,javascript,react-native,react-native-android,Javascript,React Native,React Native Android,嗨,我正在尝试为我的应用程序创建自己的登录屏幕,我收到了这个错误 它说错误位于: 登录时(在App.js:12) 这是我的Login.js: import React,{Component}来自“React”; 从“react native”导入{View,Text}; 从“./组件”导入{标题、卡片、卡片节、输入、按钮、微调器}; 从“./components/PasswordTextInput”导入PasswordTextInput; 类登录扩展组件{ 状态={email:,密码:,错误:,

嗨,我正在尝试为我的应用程序创建自己的登录屏幕,我收到了这个错误

它说错误位于:

登录时(在App.js:12)

这是我的Login.js:

import React,{Component}来自“React”;
从“react native”导入{View,Text};
从“./组件”导入{标题、卡片、卡片节、输入、按钮、微调器};
从“./components/PasswordTextInput”导入PasswordTextInput;
类登录扩展组件{
状态={email:,密码:,错误:,加载:false};
onButtonPress(){
const{email,password}=this.state;
如果(email.length==0 | | password.length==0){
这是我的国家({
错误:“请输入有效凭证”,
加载:错误
})
}
否则{
this.setState({error:,load:true});
}
}
onLoginFail(){
这是我的国家({
错误:“身份验证失败”,
加载:错误
});
}
onloginsucess(){
这是我的国家({
电邮:“,
密码:“”,
加载:false,
错误:“
});
}
renderButton(){
if(this.state.loading){
返回;
}
返回登录;
}
渲染器(){
如果(this.state.error.length>0){
返回{this.state.error}
}
}
render(){
返回(
this.setState({email})}
/>
this.setState({password})}
/>
{this.state.error.length>0&&{this.state.error}
{this.renderButton()}
);
}
}
常量样式={
错误样式:{
尺码:18,
对准自己:“居中”,
颜色:“红色”,
填充:5
}
};
导出默认登录;
这是我的App.js:

import React,{Component}来自'React';
进口{
评价学
}从“反应本机”;
从“./src/pages/Login”导入登录名;
导出默认类应用程序扩展组件{
render(){
返回(
);
}
}
AppRegistry.registerComponent('App',()=>App);
我已经读过一些关于类似问题的解决方案,有人说我正在调用一个函数,这个函数调用另一个函数并来回调用,因此它达到了极限

你能检查一下我的代码并告诉我必须对Login.js文件做什么更改吗?

请参见

“这意味着在代码中的某个地方,您正在调用一个函数,而该函数反过来又调用另一个函数,以此类推,直到达到调用堆栈限制

这几乎总是因为递归函数的基本情况没有得到满足。”


因此,如果您尝试将函数分成小部分,以验证在代码中的某个特定点上不会再超过堆栈。

我将抛出一个三元组,看看它是否进入:

我认为您遇到的问题如下:在输入和PasswordTextInput中,您在onChangeText方法中写得不正确。这是可行的,但除了在修改文本时执行外,还将在呈现组件时立即执行

除此之外,每次更改文本时,状态都会被修改(这很好),但只要更改状态,就会执行render方法。由于标记有一个value方法,该方法在每次执行render方法时都为其提供值,因此该值会更改,从而通过再次更改状态来执行onChangeText方法,从而产生问题

一旦执行了render方法,onChangeText就会在启动时执行,错误就会出现

解决方案:将您的输入更改为:

<Input
        placeholder="Enter Email"
        label="Email"
        onChangeText={(email) => {
          this.setState({ email })
        }}
      />


 <PasswordTextInput
        placeholder="Enter Password"
        label="Password"
        onChangeText={(password) => {
          this.setState({ password })
        }}
      />
{
this.setState({email})
}}
/>
{
this.setState({password})
}}
/>

祝你好运^

什么时候抛出错误?在初始渲染时还是在按下按钮时?